0
我试图在首选项更改时使用新设置重新启动服务。我正在使用的代码大致是从this question类似于:在android偏好片段中使用startService()
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?
为什么不能将GeneralPreferenceFragment设置为非静态? – 7383
它引发错误“此片段内部类应该是静态的”。 – Keith
你的外班是什么,内班有什么需要?请发布完整的代码以获得更好的理解。 – 7383