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

可能您的元素上缺少 an <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 回答