从 PreferenceFragment 启动服务
Start service from PreferenceFragment
我想从我的 PreferenceFragment 启动后台服务。为了实现这一点,我首先创建了 Service:
public class MyService extends IntentService {
private static final String TAG = makeLogTag(MyService.class);
public MyService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
Toast.makeText(this, "It's working", Toast.LENGTH_SHORT).show();
}
}
然后我添加了应该启动意图的首选项:
<PreferenceScreen
android:title="@string/my_preference">
<intent android:action="MY_SERVICE"/>
</PreferenceScreen>
当然我给 AndroidManifest.xml
添加了特殊属性
<service
android:name=".MyService"
android:exported="false">
<intent-filter>
<action android:name="MY_SERVICE"/>
</intent-filter>
</service>
问题
不幸的是,我收到无法通过 act="MY_SERVICE" 找到 Activity 的错误。我明白 Activity 没有问题,但是如何启动服务?
首选项屏幕中的 Intent 是使用 startActivity(),
启动的,但您需要改为使用 startService()
。
您应该像这样XML做出您的偏好
<PreferenceScreen
android:key="pref_open_service_key"
android:title="@string/my_preference">
</PreferenceScreen>
并在您的代码中启动服务。
Preference myPref = (Preference) findPreference("pref_open_service_key");
myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(PreferenceActivity.this, MyService.class);
startService(intent);
}
});
我想从我的 PreferenceFragment 启动后台服务。为了实现这一点,我首先创建了 Service:
public class MyService extends IntentService {
private static final String TAG = makeLogTag(MyService.class);
public MyService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
Toast.makeText(this, "It's working", Toast.LENGTH_SHORT).show();
}
}
然后我添加了应该启动意图的首选项:
<PreferenceScreen
android:title="@string/my_preference">
<intent android:action="MY_SERVICE"/>
</PreferenceScreen>
当然我给 AndroidManifest.xml
添加了特殊属性<service
android:name=".MyService"
android:exported="false">
<intent-filter>
<action android:name="MY_SERVICE"/>
</intent-filter>
</service>
问题
不幸的是,我收到无法通过 act="MY_SERVICE" 找到 Activity 的错误。我明白 Activity 没有问题,但是如何启动服务?
首选项屏幕中的 Intent 是使用 startActivity(),
启动的,但您需要改为使用 startService()
。
您应该像这样XML做出您的偏好
<PreferenceScreen
android:key="pref_open_service_key"
android:title="@string/my_preference">
</PreferenceScreen>
并在您的代码中启动服务。
Preference myPref = (Preference) findPreference("pref_open_service_key");
myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(PreferenceActivity.this, MyService.class);
startService(intent);
}
});