1

我有两个应该绑定到服务的应用程序。应用程序 1 启动服务(如果尚未启动)。

startService(new Intent(this, Listener.class));

然后它绑定服务。

bindService(new Intent(this, Listener.class), mConnection, 0);

之后onServiceConnected将被调用并且 Activity 将完成并且服务将被取消绑定。服务仍在运行(bindService 中的“0”)。

直到这里一切都很好。

第二个 App 的代码看起来完全一样。但它不会启动服务,因为它已经运行。bindService返回真。所以一切看起来都很好。但onServiceConnected永远不会被调用。

我发现了这个: onServiceConnected () 没有被getApplicationContext.bindService调用改变任何东西。我想我需要更多类似的东西,getSystemContext因为活动不在同一个应用程序中。

在我的 ManifestFiles 中,我输入了以下内容:

<service
     android:name="com.example.tools.Listener"
     android:label="Listener"
     android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
     <intent-filter>
          <action android:name="com.example.tools.Listener" />
     </intent-filter>
</service>

我希望有人可以帮助我。

此致

费边

4

2 回答 2

0

我认为您缺少exported要在 AndroidManifest.xml 中启动的服务的属性

于 2017-08-03T11:42:21.953 回答
0

这是我解决问题的方法。哪个应用程序先启动并不重要。

该应用程序检查服务是否正在运行(https://stackoverflow.com/a/5921190/8094536)如果它没有运行我启动服务。为此,我设置了 componentName 并启动了服务:

Intent intent = new Intent();
ComponentName component= new ComponentName("com.example.firstApp", "com.example.tools.Listener");
intent.setComponent(component);
startService(intent);

而不是我绑定它:

this.bindService(intent, mConnection, 0)

如果服务已经在运行,我设置 componentName 并直接绑定它:

Intent intent = new Intent();
ComponentName component= new ComponentName("com.example.secondApp", "com.example.tools.Listener");
intent.setComponent(component);
this.bindService(intent, mConnection, 0)

我的 AndoridManifest.xml 看起来像这样:

    <service
        android:name="com.example.tools.Listener"
        android:label="Listener"
        android:exported="true">
        <intent-filter>
            <action android:name="com.example.tools.Listener" />
        </intent-filter>
    </service>

注意:android.permission.BIND_ACCESSIBILITY_SERVICE如果您不使用系统应用程序,请勿使用。

现在两个应用程序都已绑定并被onServiceConnected调用。

感谢@pskink

于 2017-08-09T09:02:26.600 回答