onServiceConnected() не вызывается во втором приложении
У меня есть два приложения, которые должны быть привязаны к Сервису. Приложение 1 запускает службу, если она еще не запущена.
startService(new Intent(this, Listener.class));
Тогда это связывает сервис.
bindService(new Intent(this, Listener.class), mConnection, 0);
После этого onServiceConnected
будет вызвано, и действие будет завершено, и служба будет отменена. Служба все еще работает ("0" в bindService).
Пока здесь все в порядке.
Код второго приложения выглядит точно так же. Но он не запускает службу, потому что он уже работает. 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>
Я надеюсь, что кто-то может помочь мне с этим.
С наилучшими пожеланиями
Fabian
2 ответа
Вот как я решил проблему. И не важно, какое приложение запускается первым.
Приложение проверяет, работает ли служба ( /questions/34814266/kak-proverit-rabotaet-li-servis-na-android/34814287#34814287) Если она не запущена, я запускаю службу. Для этого я устанавливаю 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
Я думаю, что вы пропали без вести exported
атрибут для сервиса, который вы хотите запустить в AndroidManifest.xml