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