Начать активность из сервиса, когда прибыл сообщение из часов - PullRequest
1 голос
/ 02 февраля 2020

Я пишу приложение, которое работает с Wear OS. Необходимо, чтобы при запуске приложения на часах приложение также сразу запускалось на телефоне. Команда запуска на часах поступает успешно, но приложение на телефоне не запускается. Пробный запуск с использованием Intent Filters:

    if (messageEvent?.path.equals(START_ACTIVITY_ON_PHONE_PATH)) {
        val startIntent = Intent("com.example.app.gui.activities.SplashActivity")
        startIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        startActivity(startIntent)
    }

В манифесте:

   <activity
        android:name="com.example.app.gui.activities.SplashActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.SplashActivity"
        android:windowSoftInputMode="stateHidden|stateAlwaysHidden">
        <intent-filter>
            <action android:name="com.example.app.gui.activities.SplashActivity" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

Также пробовал использовать явный вызов SplashActivity:

   if (messageEvent?.path.equals(START_ACTIVITY_ON_PHONE_PATH)) {
        val startIntent = Intent(this,SplashActivity::class.java)
        startIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        startActivity(startIntent)
    }

Часть с путем работает и всегда смотрите в логах:

I/Timeline: Timeline: Activity_launch_request time:3649351

1 Ответ

0 голосов
/ 03 февраля 2020

Сервис, который вызывает Activity, должен запускаться на переднем плане и устанавливать разрешение. FOREGROUND_SERVICE манифест:

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

Сервис, который прослушивает событие от износа:

    <service
        android:name="com.example.app.services.ListenerServiceFromWear"
        android:enabled="true"
        android:exported="true"
        android:process=":wearlistener">
        <intent-filter>
            <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
            <data
                android:host="*"
                android:pathPrefix="/start-activity-on-phone"
                android:scheme="wear" />
        </intent-filter>
    </service>

В получателе, который запускает сервис, необходимо добавить:

    val startServiceIntent = Intent(context, ListenerServiceFromWear::class.java)
    context.startForegroundService(startServiceIntent)
...