Мой WearableListenerService не запускается при перезапуске Android Wear

У меня есть приложение для Android, которое (среди прочего) показывает уведомления на устройстве Android Wear.

Это делается с помощью класса в модуле Wear, расширяющего WearableListenerService. В модуле Wear у меня также есть класс, расширяющий BroadcastReceiver.

Сценарий здесь: - Запустите приложение из Android Studio - Используйте приложение для телефона, чтобы уведомление отображалось на устройстве Wear - Перезагрузите устройство Wear

Теперь я хочу, чтобы, если я заставлю телефон показывать другое уведомление, оно должно появиться на носимом устройстве. Это не так, потому что WearableListenerService не запущен...

Поэтому я позволяю BroadcastManager прослушивать события ACTION_BOOT_COMPLETED:

@Override
public void onReceive(Context context, final Intent intent) {
    Log.d(TAG, "onReceive!");
    if(intent==null)
        return;

    if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
        Log.d(TAG, "Action boot completed");
        ComponentName c = context.startService(new Intent(context, OngoingNotificationListenerService.class));
        Log.d(TAG, "returned " + c);
        return;
    }
    .
    .
    .

И в моем файле манифеста:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
.
.
.
<receiver android:name=".ActionsReceiver" android:enabled="true" android:exported="false">
        <intent-filter>
            <action android:name="com.XX.receiver.action_pause" />
            <action android:name="com.XX.receiver.action_resume" />
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
</receiver>

Теперь проблема в том, что мое приложение не получает действие BOOT_COMPLETED. Я проверил журнал и увидел, что другие слушатели на часах получают это событие после перезагрузки, но не мои.

Я видел несколько сообщений об этом, например, Android BOOT_COMPLETED не получен когда приложение закрыто

Я думаю, что это может быть очень похоже на мою проблему.

В моем приложении для Android Wear нет «основной активности», которую может запустить пользователь — это ТОЛЬКО служба прослушивания и приемник. Хотя я быстро реализовал основное действие с намерением запуска, чтобы я мог запускать приложение из панели запуска на часах. Это никак не повлияло на ситуацию. После перезапуска часов они не будут отображать уведомление из моего приложения, пока я не переустановлю его из студии Android.

Значит, я пропустил что-то важное? Должен ли мой WearableListenerService запускаться без моего участия при перезапуске часов? (Это не...) Или это как-то связано с тем, что это версия приложения для разработчиков?

(Примечание: я также пробовал выключать, а затем запускать - без разницы)


person Joakim    schedule 12.11.2014    source источник


Ответы (2)


Попробуйте добавить <category android:name="android.intent.category.DEFAULT" /> в список ваших детей <intent-filter>

person Tony Malghem    schedule 12.11.2014

Вам нужно добавить свой сервис в манифест модуля износа и добавить к нему действие BIND_LISTENER DATA_CHANGED:

Для прослушивания элементов данных и сообщений по пути /prefix новый синтаксис выглядит следующим образом (согласно сайт инструментов Android):

<service android:name=".ExampleWearableListenerService">
    <intent-filter>
        <action android:name="com.google.android.gms.wearable.DATA_CHANGED" />
        <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
        <data android:scheme="wear" android:host="*" android:pathPrefix="/prefix" />
    </intent-filter>
</service>
person Entreco    schedule 11.03.2015
comment
@GabrielOshiro, что ты имеешь в виду? - person Siarhei; 03.12.2016
comment
@ user5599807 Я имел в виду, что в его ответе использовался устаревший код. С тех пор он исправил свой ответ. - person GabrielOshiro; 03.12.2016