从PreferenceFragment启动服务

时间:2016-03-13 15:53:18

标签: android intentservice preferencefragment

我想从PreferenceFragment启动后台服务。为了实现这一点,我首先创建了服务

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没有问题,但如何启动服务?

1 个答案:

答案 0 :(得分:3)

首选项屏幕中的意图使用startActivity(),启动,但您需要使用startService()代替。

你应该像这样使用你的偏好

 <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);
     }
});