我的目标是制作3个apks(针对非常具体的解决方案,而不是正常消费):
根据这个网站: 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,现在我的代码似乎有用了。
答案 0 :(得分:1)
您可能遗漏了<intent-filter>
元素上的<service>
,您声明了您尝试让服务响应的<action>
,例如:
<service android:name=".BshService">
<intent-filter>
<action android:name="com.commonsware.android.advservice.IScript" />
</intent-filter>
</service>