Android Wear(三): WearableActivity

文章撰寫時(shí)間2017年2月18日10:41:35,請(qǐng)注意時(shí)效性。

測(cè)試手表:HUAWEI WATCH
系統(tǒng):Android wear 1.4+,Android 6.0.1
屏幕:1.4英寸Amoled圓屏

測(cè)試手機(jī):華為honor v8
系統(tǒng):Android 7.0
所需軟件:Android Wear,華為應(yīng)用市場(chǎng)可下載

WearableActivity

在新建出來的Android Wear項(xiàng)目中,MainActivity繼承于WearableActivity,跟一般的Activity多實(shí)現(xiàn)了幾個(gè)方法:onEnterAmbient,onUpdateAmbient,onExitAmbient

Paste_Image.png
1、setAmbientEnabled()

處理模式之間的轉(zhuǎn)換

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

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

2、onEnterAmbient

當(dāng)activity切換到環(huán)境模式時(shí),系統(tǒng)會(huì)調(diào)用onEnterAmbient()

3、onExitAmbient

當(dāng)用戶敲擊屏幕或者舉起他們的手臂時(shí),將會(huì)切換到交互模式.此時(shí)系統(tǒng)調(diào)用onExitAmbient()方法

4、onUpdateAmbient

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

** 更加頻繁的更新 **

對(duì)于需要更加頻繁更新的應(yīng)用,比如健身,計(jì)時(shí)。使用AlarmManager這個(gè)類的對(duì)象去喚醒進(jìn)程完成更加頻繁的更新屏幕。

  • 準(zhǔn)備一個(gè)alarm管理器
  • 設(shè)置更新頻率
  • 如果當(dāng)前是環(huán)境模式或者當(dāng)切換到環(huán)境模式時(shí)調(diào)度下一次更新
  • 當(dāng)切換到交互模式或者activity停止時(shí)取消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);
    }

當(dāng)alarm被觸發(fā)就會(huì)啟動(dòng)一個(gè)隱式意圖,更新屏幕并調(diào)度下一次更新通過重寫onNewIntent()這個(gè)方法.

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

    setIntent(intent);

    refreshDisplayAndSetNextUpdate();
}

在這個(gè)示例activity中alarm管理器每20s觸發(fā)一次.當(dāng)定時(shí)器計(jì)時(shí),alarm觸發(fā)更新屏幕的意圖同時(shí)設(shè)置下一次更新的延遲.

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

    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()這兩個(gè)方法當(dāng)activity在進(jìn)入環(huán)境模式或者activity已經(jīng)是環(huán)境模式調(diào)度下次更新屏幕。

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

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

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

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

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

Android Wear(四): Notification

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容