私の目標は、3つのapkを作成することです(通常の消費ではなく、非常に具体的なソリューションのために):
- 最初に、起動時に開始するサービスが含まれています
- このサービスを使用するクライアント
- このサービスを使用する別のクライアント
このサイトによると: http ://www.androidcompetencycenter.com/2009/06/start-service-at-boot/
名前を知っているだけでサービスを開始できます。ただし、これは機能しません。
// works
context.startService(new Intent(context, MyServiceMessenger.class));
// does not work
Intent serviceIntent = new Intent();
serviceIntent.setAction(MyService.SERVICE_CLASS_NAME);
context.startService(serviceIntent);
MyService.SERVICE_CLASS_NAME
==と言う必要がありmypackage.MyServiceMessenger
ます。
私の問題はバインディングにあります-クラス外のサービスにバインドする必要があります。
// does not work
Intent intent = new Intent(context, MyService.SERVICE_CLASS_NAME);
// works
Intent intent = new Intent(context, MyServiceMessenger.class);
intent.putExtra("MESSENGER", messenger);
context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
名前でサービスにバインドする場合、myserviceConnection
はまったく使用されておらず、サービスに情報を送信できません。
私は何が欠けていますか?
編集1:
マニフェストにエクスポートがありませんでした。あなたはそれを「エクスポート」し、それに名前を付ける必要があります。私も許可しました。@@の文字列と同じ文字列をインテントで使用しています。
<permission android:name="MyPermission"
android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
android:protectionLevel="dangerous" />
<uses-permission android:name="MyPermission" />
<application ... >
<service
android:name="service.MyServiceMessenger"
android:exported="true"
android:permission="MyPermission" >
<intent-filter>
<action android:name="**platinum8.service.P2PServiceMessenger**"></action>
</intent-filter>
</service>
</application>
編集2:
同じサービス名のインテントフィルターを追加しましたが、コードが機能しているようです。