21

I'm having a problem starting a service from another Android app (API 17). However, if I do run 'am' from the shell, the service starts fine.

# am startservice com.xxx.yyy/.SyncService
Starting service: Intent { act=android.intent.action.MAIN cat=
[android.intent.category.LAUNCHER] cmp=com.xxx.yyy/.SyncService }
(service starts fine at this point)
# am to-intent-uri com.xxx.yyy/.SyncService
intent:#Intent;action=android.intent.action.MAIN;
category=android.intent.category.LAUNCHER;
component=com.xxx.yyy/.SyncService;end

So, it doesn't look like I'm missing anything from the intent when I do the same in the code:

Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
i.setComponent(new ComponentName("com.xxx.yyy", ".SyncService"));
ComponentName c = ctx.startService(i);
if (c == null) { Log.e(TAG, "failed to start with "+i); }

What I get is (the service is not running at that time):

E/tag( 4026): failed to start with Intent { 
act=android.intent.action.MAIN 
cat=[android.intent.category.LAUNCHER] 
cmp=com.xxx.yyy/.SyncService }

I don't have an intent filter on the service, and I don't want to set one up, I'm really trying to understand what am I doing wrong starting it through its component name, or what may be making it impossible to do so.

4

3 に答える 3

54

次のようにサービスを開始できるはずです。

Intent i = new Intent();
i.setComponent(new ComponentName("com.xxx.yyy", "com.xxx.yyy.SyncService"));
ComponentName c = ctx.startService(i);

特定のコンポーネントを指定する場合、ACTION または CATEGORY を設定する必要はありません。サービスがマニフェストで適切に定義されていることを確認してください。

于 2013-06-27T17:38:26.663 に答える
2

このようにサービスを開始します

Intent intent = new Intent();
intent.setComponent(new ComponentName("pkg", "cls"));
ComponentName c = getApplicationContext().startForegroundService(intent);

ところで、実際には pkg の代わりに applicationId を使用する必要があります。アプリgradleで見つけることができます。私は何時間もその間違いに苦しんでいました!

   defaultConfig {
        applicationId "com.xxx.zzz"
}

cls は、マニフェストで宣言されたサービスの名前です。例: com.xxx.yyy.yourService。

 <service android:name="com.xxx.yyy.yourService"
android:exported="true"/>
于 2019-04-10T09:09:24.740 に答える