文章撰寫時(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

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