0

我有一个应用程序,用户可以在其中选择他想要振动还是静音模式。从主活动中,我将数据作为 Intent 的一部分传递给服务(服务始终在运行)。

在服务的 onStartCommand 方法中,我第一次得到数据,一切正常。但是当我退出应用程序时,可能会在一段时间后再次调用服务的 onStartCommand 方法,而 Intent 中没有数据(可能是 Launcher 或 android OS 正在执行此操作)。

由于我使用 Intent 中的数据设置了一个本地字符串变量,因此当操作系统调用 onStartCommand 方法时,我得到 Null 异常。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if(mode == null) {
        mode = (String) intent.getExtras().get("mode");
    }
    return super.onStartCommand(intent, flags, startId);
}

现在我的问题是如何第一次从活动中获取数据,然后在服务类的各种成员方法中引用它。

我尝试将模式变量设为静态但同样的问题。看起来操作系统会自行决定卸载服务类,然后将其加载回来并使用普通 Intent 调用 onStartCommand。

4

1 回答 1

1

您必须使用SharedPreference来保存变量 Vibrate 或 Silent 模式的状态。这是一个可能的解决方案:

    SharedPreferences preferences = getApplicationContext()
            .getSharedPreferences("preferences_name", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("mode", "silent"); // Silent Mode
    // editor.putString("mode", "vibrate"); //Vibrate Mode
    editor.commit();
于 2013-07-17T16:32:59.463 回答