android按名称启动服务

时间:2012-05-06 13:12:10

标签: android android-intent android-service

我的目标是制作3个apks(针对非常具体的解决方案,而不是正常消费):

  1. 首先包含从boot
  2. 开始的服务
  3. 使用此服务的客户
  4. 使用此服务的另一个客户
  5. 根据这个网站: 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);
    

    按名称绑定到服务时,我的serviceConnection根本没有被使用,我无法向服务发送信息。

    我错过了什么?

    EDIT1:

    我在清单中错过了一个导出。你需要“导出”它,并给它一个名字。我也同意了。我在意图中使用与@@中相同的字符串。

    <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:

    我添加了一个与服务名称相同的intent-filter,现在我的代码似乎有用了。

1 个答案:

答案 0 :(得分:1)

您可能遗漏了<intent-filter>元素上的<service>,您声明了您尝试让服务响应的<action>,例如:

<service android:name=".BshService">
  <intent-filter>
    <action android:name="com.commonsware.android.advservice.IScript" />
  </intent-filter>
</service>