我有一個Android Wear手錶錶盤,我試圖在一小時內振動手錶。除了手錶屏幕關閉的情況外,它正在工作。根據日誌語句,每分鐘調用一次處理程序方法,並在每小時調用一次鐘聲方法。如果我使用Moto 360通過藍牙進行調試,即使屏幕關閉,它也可以工作。如果我安裝了發行版apk,它只會在屏幕打開時振動。如果屏幕在小時的頂部關閉,則不會振動,直到屏幕重新打開。我試圖在沒有運氣的振動之前獲得喚醒鎖。我認爲這可能會工作,如果我在onCreate獲得一個喚醒鎖,並在onDestroy中釋放它,但我寧願不這樣做來保存電池。另一個有趣的事情是,當可穿戴數據api中的某些數據發生變化並且屏幕處於關閉狀態時,我還有另一個功能會發生振動。也許WearableListenerService將手錶喚醒足夠長的時間,以便發生振動。我的邏輯有問題嗎?或者這是某些Android Wear設備的限制?Android Wear手錶臉部振動與屏幕關閉
時間更改處理:
final Handler mUpdateTimeHandler = new Handler() {
@Override
public void handleMessage(Message message) {
switch (message.what) {
case MSG_UPDATE_TIME:
MyLog.d("Time Tick Message Handler");
doTimeTickStuff();
long timeMs = System.currentTimeMillis();
long delayMs = mInteractiveUpdateRateMs - (timeMs % mInteractiveUpdateRateMs);
mUpdateTimeHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIME, delayMs);
break;
}
}
};
doTimeTickStuff()
private void doTimeTickStuff()
{
MyLog.d("timetickstuff");
try {
mCalendar = Calendar.getInstance();
int currMin = mCalendar.get(Calendar.MINUTE);
if (currMin == 0) {
hourlyChime();
}
}
catch(Exception ex)
{
MyLog.e(ex, "Error occurred in time tick handler");
}
if (mIsVisible) {
invalidate();
}
}
hourlyChime()
private void hourlyChime(){
Vibrator v = (Vibrator) getBaseContext().getSystemService(VIBRATOR_SERVICE);
if (v.hasVibrator()) {
MyLog.d("vibrating");
v.vibrate(1000);
}
else {
MyLog.d("No vibrator");
}
}
更新 的起作用的解決方案是創建一個AlarmManager並與在手錶表面的廣播接收機中註冊它的onCreate然後註銷接收機中的onDestroy
的onCreate()
@Override
public void onCreate(SurfaceHolder holder) {
super.onCreate(holder);
mChimeAlarmManager =
(AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent ambientStateIntent = new Intent("packagename.HOURLY_CHIME");
mChimePendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
1234, ambientStateIntent, PendingIntent.FLAG_UPDATE_CURRENT);
WeatherTime.this.registerReceiver(chimeReceiver,
new IntentFilter("packagename.HOURLY_CHIME"));
long alarmMs = getMsTillNextHour() + System.currentTimeMillis();
mChimeAlarmManager.setExact(
AlarmManager.RTC_WAKEUP,
alarmMs,
mChimePendingIntent);
}
廣播接收機
private BroadcastReceiver chimeReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
hourlyChime();
mChimeAlarmManager.setExact(
AlarmManager.RTC_WAKEUP,
getMsTillNextHour() + System.currentTimeMillis(),
mChimePendingIntent);
}
};
onDestr Oy()
@Override
public void onDestroy() {
mChimeAlarmManager.cancel(mChimePendingIntent);
super.onDestroy();
}
做時,它應該在環境模式剔每小時振動你會得到什麼記錄? –
環境模式與否,我得到我所期望的所有日誌語句。最重要的是,我得到了「振動」日誌,因此它能夠獲得振動器的實例並識別出手表具有振動器,但除非屏幕打開或正在調試,否則振動器不會振動。 –
因此,如果您正在調試,它會在環境模式下振動,對不對?如果你只在調試時遇到問題(這是需要查看日誌的權限?) –