【问题标题】:Start service from PreferenceFragment从 PreferenceFragment 启动服务
【发布时间】:2016-03-13 15:53:18
【问题描述】:

我想从我的 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是没有问题的,但是如何启动Service呢?

【问题讨论】:

  • 标签用于启动Activity,而不是Service
  • 我注意到了,但是如何启动服务呢?
  • 来自Activity?
  • 来自 PreferenceFragment
  • 所以直接从PreferenceFragment调用startService,有什么问题?

标签: android intentservice preferencefragment


【解决方案1】:

首选项屏幕中的 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);
     }
});

【讨论】:

  • 这是最好的解决方案吗?我会在几分钟内检查你的回答是否被接受。
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多