0

私は何か重要なものが欠けているか...

2つのアプリケーションがあります。そのうちの1つには、AndroidManifestで宣言されたインテントフィルターを備えたエクスポートされたサービスが含まれています。

<service
    android:name=".MyService"
    android:exported="true"
    android:permission="my.permission" >
    <intent-filter>
        <action android:name="my.service" />
    </intent-filter>
</service>

「my.service」アクションを使用して、別のアプリケーションからそのサービスに正常にバインドできます。しかし、サービスを開始したい(コマンドを送信する)。私が書いた場合:

Intent intent = new Intent("my.service");
intent.setAction("my.command");
ComponentName cn = startService(intent);

null入りますcn(サービスは解決できません)。しかし、これを次のように変更すると、

PackageManager packageManager = getPackageManager();
Intent serviceIntent = new Intent("my.service");
List<ResolveInfo> services = packageManager.queryIntentServices(serviceIntent, 0);
if (services.size() > 0) {
    ResolveInfo service = services.get(0);
    intent = new Intent();
    intent.setClassName(service.serviceInfo.packageName, service.serviceInfo.name);
    intent.setAction("my.command");
    ComponentName cn = startService(intent);
}

サービスが正常に開始されました。私は最初のバリアントを含むStackOverflowに関する多くのアドバイスを見てきましたが、それを機能させることはできません。何か案は?

4

4 に答える 4

1

動作していないコードでは、最初にコンストラクターのアクションを「my.service」に設定しています。これは機能しますが、次の行では、アクションを「my.command」に設定しています。同じサービスに別のアクションを送信する必要がある場合は、そのアクションをマニフェストのインテントフィルターにも追加する必要があります。

<service
    android:name=".MyService"
    android:exported="true"
    android:permission="my.permission" >
    <intent-filter>
        <action android:name="my.service" />
        <action android:name="my.command" />
    </intent-filter>
</service>
于 2013-03-05T15:08:12.870 に答える
0

ドキュメントには次のように書かれています。

サービスが開始されているか、すでに実行されている場合は、開始された実際のサービスのComponentNameが返されます。それ以外の場合、サービスが存在しない場合はnullが返されます。

「バインディング」whithサービス(フランス語)を使用する簡単なチュートリアルを実現しました:http://julien-dumortier.fr/service-et-binding-sous-android/ 多分 それは役立つでしょう

于 2013-02-25T16:50:41.603 に答える
0
Try the following in your activity oncreate()

 intent = new Intent(this, BackHelper.class);

 startService(intent);

In manifest try

 service android:name=".BackHelper" 
于 2013-03-04T18:41:43.460 に答える
0

マニフェストに以下を追加します

<service 
....
android:name="the package name of your service that you imported from another project">
....
</service>

あなたの活動では、

//start service on create
ComponentName cn = startService(new Intent(this,service_file_you_imported.class));

//Binding the activity to the service 
doBindService();
于 2013-03-05T08:47:48.573 に答える