我尝试在首选项更改时使用新设置重新启动服务。我使用的代码与this question中的代码大致相似:
SettingsActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initiate listener
findPreference("service_switch").setOnPreferenceChangeListener(sRestartMyServiceOnChangeListener);
...
}
private Preference.OnPreferenceChangeListener sRestartMyServiceOnChangeListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object obj) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(SettingsActivity.this);
// Stop service
stopService(new Intent(SettingsActivity.this, MyService.class));
// Restart service
if (sharedPref.getBoolean("service_switch", false)) {
startService(new Intent(SettingsActivity.this, MyService.class));
}
return true;
}
};
这不能在我的手机上工作,抛出错误:
findPreference(java.lang.CharSequence) is deprecated
This answer表示Android已转向基于片段的活动。 SettingsActivity
基于片段...所以我尝试在片段onCreate()
中启动监听器:
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// Initiate listener
findPreference("service_switch").setOnPreferenceChangeListener(sRestartMyServiceOnChangeListener);
...
}
}
现在我没有看到弃用错误,但我得到了一个新的错误:
Non-static field 'sRestartMyServiceOnChangeListener' cannot be referenced from a static context.
我无法sRestartMyServiceOnChangeListener
静态,因为stopService()
和startService()
都是非静态的。我也不能使片段静止:
This fragment inner class should be static
那么当设置更改时,如何从首选项片段重新启动MyService?
答案 0 :(得分:0)
现在有点晚了,但是我正在研究这个问题而仍然没有找到任何答案,所以我正在分享我的研究成果:
我正在研究解决方法。直接在XML中使用这种类型的代码:
<Preference
android:summary="@string/summary_startBaseProfiling"
android:title="@string/title_startBaseProfiling"
android:key="settings_startBaseProfiling">
<intent
android:targetPackage="my.utar.phonesecurat"
android:targetClass="my.utar.phonesecurat.BaseProfilingActivity" />
</Preference>
我将启动一个“Transitory活动”,然后像往常一样启动我的服务,唯一的问题是发送/共享想要在您的意图中添加额外信息。
希望它有所帮助。
祝你好运