Android 只启动一次方法

Android 只启动一次方法,android,methods,android-studio,alarmmanager,android-alarms,Android,Methods,Android Studio,Alarmmanager,Android Alarms,所以这可能是一个非常基本的问题,但我找不到一个对我有用的答案。我有一个方法“notificationsetter()”,它启动一个警报以显示通知,并每24小时发出一次警报。问题是,我只需调用该方法一次,因为如果我在警报关闭后使用它,通知会立即出现(例如,警报设置为7AM,我使用方法10AM,通知会在10AM立即出现) 因此,我在onCreate()中的MainActivity中创建了以下代码: 因此,代码“应该”调用该方法一次,然后,由于notificationtrue始终设置为true,因此不

所以这可能是一个非常基本的问题,但我找不到一个对我有用的答案。我有一个方法“notificationsetter()”,它启动一个警报以显示通知,并每24小时发出一次警报。问题是,我只需调用该方法一次,因为如果我在警报关闭后使用它,通知会立即出现(例如,警报设置为7AM,我使用方法10AM,通知会在10AM立即出现)

因此,我在onCreate()中的MainActivity中创建了以下代码:

因此,代码“应该”调用该方法一次,然后,由于notificationtrue始终设置为true,因此不会再次调用它。这里的问题是,notificationtrue显示为灰色,android studio表示:

“从未使用分配给notificationtrue的值false”


这意味着,我的代码无法工作。是否有其他方法只调用该方法一次?

在您的首选项中保存一个布尔值,如下所示

/**
     * Checks that application runs first time and write flag at SharedPreferences
     *
     * @return true if 1st time
     */
    private boolean isFirstTime() {

        SharedPreferences preferences = getPreferences(MODE_PRIVATE);
        boolean ranBefore = preferences.getBoolean(RetailStoreConstants.FIRST_TIME, false);
        if (!ranBefore) {
            // first time
            SharedPreferences.Editor editor = preferences.edit();
            editor.putBoolean(RetailStoreConstants.FIRST_TIME, true);
            editor.commit();
        }
        return !ranBefore;
    }

然后使用该布尔值执行操作。

是否有理由将该值设置为false,然后立即检查是否为false?这一点很好。嗯,我的意图是第一次将方法设置为false,因此当if语句发生一次时,它将设置为true,并且不再发生。什么是/是retailstoreconstants,为什么android studio不能解析它们/它?它只是一个常量,使用任何字符串“demo”代替它。投票并接受答案。如果我在那里放一个字符串,android studio无法解析FIRST\u TIMEdude,你必须给出字符串类型,比如“FIRST\u type”。这是preference的名字。对不起,我是编程的初学者,只知道一些基本的东西。
/**
     * Checks that application runs first time and write flag at SharedPreferences
     *
     * @return true if 1st time
     */
    private boolean isFirstTime() {

        SharedPreferences preferences = getPreferences(MODE_PRIVATE);
        boolean ranBefore = preferences.getBoolean(RetailStoreConstants.FIRST_TIME, false);
        if (!ranBefore) {
            // first time
            SharedPreferences.Editor editor = preferences.edit();
            editor.putBoolean(RetailStoreConstants.FIRST_TIME, true);
            editor.commit();
        }
        return !ranBefore;
    }