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

Другие вопросы по тегам