Android Wear(三): WearableActivity

文章撰寫時間2017年2月18日10:41:35,請注意時效性。

測試手表:HUAWEI WATCH
系統:Android wear 1.4+,Android 6.0.1
屏幕:1.4英寸Amoled圓屏

測試手機:華為honor v8
系統:Android 7.0
所需軟件:Android Wear,華為應用市場可下載

WearableActivity

在新建出來的Android Wear項目中,MainActivity繼承于WearableActivity,跟一般的Activity多實現了幾個方法:onEnterAmbient,onUpdateAmbient,onExitAmbient

Paste_Image.png
1、setAmbientEnabled()

處理模式之間的轉換

當穿戴式設備展示時用戶在一段時間內沒有交互,或者用戶用手蓋住設備屏幕,系統應該切換activity的環境模式。在應用切換模式之后,更新UI減少電池消耗。你應該使用黑背景和較小的白圖形和文字。為了從交互模式切換到環境模式減少用戶的反應,盡量保持和原來模式下相同的放置。

** 注意:在環境模式,交互元素是禁用的比如按鈕 **

2、onEnterAmbient

當activity切換到環境模式時,系統會調用onEnterAmbient()

3、onExitAmbient

當用戶敲擊屏幕或者舉起他們的手臂時,將會切換到交互模式.此時系統調用onExitAmbient()方法

4、onUpdateAmbient

環境模式允許使用用戶的信息更新屏幕,但是需要小心的平衡更新。你應該慎重考慮重寫onUpdateAmbient()方法在環境模式每分鐘更新一次。如果你的應用要求更頻繁的更新,請考慮電池電量和頻繁更新兩者的權衡。為了省電,更新不能超過10s一次這個頻率。實際中你應該更少的更新你的應用。

** 更加頻繁的更新 **

對于需要更加頻繁更新的應用,比如健身,計時。使用AlarmManager這個類的對象去喚醒進程完成更加頻繁的更新屏幕。

  • 準備一個alarm管理器
  • 設置更新頻率
  • 如果當前是環境模式或者當切換到環境模式時調度下一次更新
  • 當切換到交互模式或者activity停止時取消alarm
  • 1)、alarm管理器
    private AlarmManager mAmbientStateAlarmManager;
    private PendingIntent mAmbientStatePendingIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setAmbientEnabled();

        mAmbientStateAlarmManager =
                (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent ambientStateIntent =
                new Intent(getApplicationContext(), MainActivity.class);

        mAmbientStatePendingIntent = PendingIntent.getActivity(
                getApplicationContext(),
                0,
                ambientStateIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
    }

當alarm被觸發就會啟動一個隱式意圖,更新屏幕并調度下一次更新通過重寫onNewIntent()這個方法.

@Override
public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    setIntent(intent);

    refreshDisplayAndSetNextUpdate();
}

在這個示例activity中alarm管理器每20s觸發一次.當定時器計時,alarm觸發更新屏幕的意圖同時設置下一次更新的延遲.

下面的代碼展示了如何在屏幕上更新信息以及如何設置下一次更新.

    private static final long AMBIENT_INTERVAL_MS = TimeUnit.SECONDS.toMillis(20);

    private void refreshDisplayAndSetNextUpdate() {
        Toast.makeText(MainActivity.this,"refreshDisplayAndSetNextUpdate",Toast.LENGTH_LONG).show();

        if (isAmbient()) {

        } else {

        }

        long timeMs = System.currentTimeMillis();
        if (isAmbient()) {
            long delayMs = AMBIENT_INTERVAL_MS - (timeMs % AMBIENT_INTERVAL_MS);
            long triggerTimeMs = timeMs + delayMs;

            mAmbientStateAlarmManager.setExact(AlarmManager.RTC_WAKEUP,
                    triggerTimeMs, mAmbientStatePendingIntent);
            
        } else {

        }
    }

通過重寫onEnterAmbient()和onUpdateAmbient()這兩個方法當activity在進入環境模式或者activity已經是環境模式調度下次更新屏幕。

當切換回道交互模式,onExitAmbient()這個方法里取消定時器;當用戶退出或者停止你的這個activity的時候需要在onDestroy()這個方法里取消定時器。

    @Override
    public void onEnterAmbient(Bundle ambientDetails) {
        super.onEnterAmbient(ambientDetails);
        //進入環境模式,用戶一定時間沒有交互,會進入該模式
        refreshDisplayAndSetNextUpdate();
    }

    @Override
    public void onUpdateAmbient() {
        super.onUpdateAmbient();
        refreshDisplayAndSetNextUpdate();
    }

    @Override
    public void onExitAmbient() {
        //退出環境模式,進入交互模式
        super.onExitAmbient();
        mAmbientStateAlarmManager.cancel(mAmbientStatePendingIntent);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mAmbientStateAlarmManager.cancel(mAmbientStatePendingIntent);
    }

Android Wear(四): Notification

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容