0

私の目標は、3つのapkを作成することです(通常の消費ではなく、非常に具体的なソリューションのために):

  1. 最初に、起動時に開始するサービスが含まれています
  2. このサービスを使用するクライアント
  3. このサービスを使用する別のクライアント

このサイトによると: 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:

同じサービス名のインテントフィルターを追加しましたが、コードが機能しているようです。

4

1 に答える 1

1

次のように、サービスに応答させようとしていることを宣言する要素にが欠落している可能性が<intent-filter>あります。<service><action>

<service android:name=".BshService">
  <intent-filter>
    <action android:name="com.commonsware.android.advservice.IScript" />
  </intent-filter>
</service>
于 2012-05-06T13:24:13.500 に答える