Как реализовать анимацию "Open on phone" на Android Wear

В соответствии с рекомендациями: https://developer.android.com/design/wear/patterns.html#Continuing

"В тех случаях, когда телефон должен использоваться, необходимо воспроизводить общую анимацию после нажатия кнопки действия, и соответствующее приложение для Android откроется на телефоне."

Анимацию можно увидеть в приложении Google Keep. Вот пример записи: https://dl.dropboxusercontent.com/u/25670071/IMG_0274.MOV

Есть ли стандартная реализация этой анимации где-то?

Ответ 1

Шаги, необходимые для реализации этой функции, зависят от того, отправлено ли уведомление с телефона или с устройства для ношения.

Уведомление с телефона:

Если ваше уведомление поступило с телефона - страница действия "Открыть по телефону" добавляется автоматически, когда установлено ваше уведомление setContentIntent (намерение PendingIntent).

Из вашего загружаемого приложения:

Если вам нужно воспроизвести эту анимацию в уведомлении, которое отправляется с переносимого устройства напрямую (или из любого другого места из вашего носящего приложения), вам нужно будет запустить эту анимацию самостоятельно.

Есть хороший ConfirmationActivity, который поддерживает несколько предопределенных типов анимации:

  • ConfirmationActivity.SUCCESS_ANIMATION
  • ConfirmationActivity.OPEN_ON_PHONE_ANIMATION
  • ConfirmationActivity.FAILURE_ANIMATION

Ожидаемая анимация - ConfirmationActivity.OPEN_ON_PHONE_ANIMATION. Вам нужно передать тип анимации в ConfirmationActivity.EXTRA_ANIMATION_TYPE extra.

Intent intent = new Intent(context, ConfirmationActivity.class);
intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.OPEN_ON_PHONE_ANIMATION);
startActivity(intent);

ВАЖНО: Чтобы запустить ConfirmationActivity, вам нужно добавить его в свой файл манифеста:

<activity android:name="android.support.wearable.activity.ConfirmationActivity" />

Тема:

Следующий шаг - настроить стиль этого ConfirmationActivity. Например, если вы хотите отключить скользящую анимацию по умолчанию или сделать окно прозрачным, вам нужно будет установить в своем манифеста пользовательскую тему:

<activity android:name="android.support.wearable.activity.ConfirmationActivity"
    android:theme="@style/TransparentTheme"/>

и определите TransparentTheme в themes.xml:

<style name="TransparentTheme" parent="@android:style/Theme.DeviceDefault">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowNoTitle">true</item>
</style>