0

我错过了一些重要的东西或......

我有两个应用程序,其中一个包含带有在 AndroidManifest 中声明的意图过滤器的导出服务:

<service
    android:name=".MyService"
    android:exported="true"
    android:permission="my.permission" >
    <intent-filter>
        <action android:name="my.service" />
    </intent-filter>
</service>

我可以使用“my.service”操作成功地从另一个应用程序绑定到该服务。但我想启动服务(向它发送命令)。如果我写:

Intent intent = new Intent("my.service");
intent.setAction("my.command");
ComponentName cn = startService(intent);

我进去nullcn(服务无法解决)。但是,如果我将其更改为:

PackageManager packageManager = getPackageManager();
Intent serviceIntent = new Intent("my.service");
List<ResolveInfo> services = packageManager.queryIntentServices(serviceIntent, 0);
if (services.size() > 0) {
    ResolveInfo service = services.get(0);
    intent = new Intent();
    intent.setClassName(service.serviceInfo.packageName, service.serviceInfo.name);
    intent.setAction("my.command");
    ComponentName cn = startService(intent);
}

服务已成功启动。我在包含第一个变体的 StackOverflow 上看到了很多建议,但我无法让它发挥作用。有任何想法吗?

4

4 回答 4

1

在不起作用的代码中,您首先将构造函数中的操作设置为“my.service”。这会起作用,但是在下一行中,您将您的操作设置为“my.command”。如果您需要向同一服务发送不同的操作,您还必须将该操作添加到清单中的意图过滤器中:

<service
    android:name=".MyService"
    android:exported="true"
    android:permission="my.permission" >
    <intent-filter>
        <action android:name="my.service" />
        <action android:name="my.command" />
    </intent-filter>
</service>
于 2013-03-05T15:08:12.870 回答
0

在您的清单中添加以下内容

<service 
....
android:name="the package name of your service that you imported from another project">
....
</service>

在您的活动中,

//start service on create
ComponentName cn = startService(new Intent(this,service_file_you_imported.class));

//Binding the activity to the service 
doBindService();
于 2013-03-05T08:47:48.573 回答
0

文件说:

如果服务正在启动或已经在运行,则返回实际启动的服务的 ComponentName;否则,如果服务不存在,则返回 null。

我实现了一个使用“绑定”服务的简单教程(法语):http: //julien-dumortier.fr/service-et-binding-sous-android/ 也许它会有所帮助

于 2013-02-25T16:50:41.603 回答
0
Try the following in your activity oncreate()

 intent = new Intent(this, BackHelper.class);

 startService(intent);

In manifest try

 service android:name=".BackHelper" 
于 2013-03-04T18:41:43.460 回答