onServiceConnected() 未在第二个应用程序中调用
onServiceConnected() not called in second App
我有两个应绑定到服务的应用程序。
应用程序 1 启动服务(如果尚未启动)。
startService(new Intent(this, Listener.class));
然后绑定服务。
bindService(new Intent(this, Listener.class), mConnection, 0);
之后 onServiceConnected
将被调用并且 Activity 将完成并且服务将被解除绑定。该服务仍然是 运行(bindService 中的“0”)。
到这里一切都很好。
第二个App的代码看起来一模一样。但它不会启动该服务,因为它已经在运行。
bindService
returns 真。所以一切看起来都很好。但是 onServiceConnected
永远不会被调用。
我发现了这个:
onServiceConnected() not called
看起来像我的问题,但活动在同一个应用程序中......
我试过 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>
我希望有人能帮助我。
此致
法比安
我认为您缺少要在 AndroidManifest.xml
中启动的服务的 exported
属性
这是我解决问题的方法。
而且哪个App先启动并不重要。
应用程序检查服务是否 运行 ()
如果不是 运行 我启动服务。为此,我设置了 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
我有两个应绑定到服务的应用程序。 应用程序 1 启动服务(如果尚未启动)。
startService(new Intent(this, Listener.class));
然后绑定服务。
bindService(new Intent(this, Listener.class), mConnection, 0);
之后 onServiceConnected
将被调用并且 Activity 将完成并且服务将被解除绑定。该服务仍然是 运行(bindService 中的“0”)。
到这里一切都很好。
第二个App的代码看起来一模一样。但它不会启动该服务,因为它已经在运行。
bindService
returns 真。所以一切看起来都很好。但是 onServiceConnected
永远不会被调用。
我发现了这个:
onServiceConnected() not called
看起来像我的问题,但活动在同一个应用程序中......
我试过 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>
我希望有人能帮助我。
此致
法比安
我认为您缺少要在 AndroidManifest.xml
中启动的服务的exported
属性
这是我解决问题的方法。 而且哪个App先启动并不重要。
应用程序检查服务是否 运行 () 如果不是 运行 我启动服务。为此,我设置了 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