由於需要APP能在Android TV進入sleep mode後還能透過網路被喚醒並播放聲音,經過一陣子的survey,發現可以用以下的方法來達到效果,先用wake lock喚醒螢幕再播放聲音。
首先要加入權限
<uses-permission android:name="android.permission.WAKE_LOCK" />
撰寫喚醒螢幕的程式:
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
boolean isScreenOn;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
isScreenOn = powerManager.isInteractive();
} else {
isScreenOn = powerManager.isScreenOn();
}
if (!isScreenOn) {
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.SCREEN_BRIGHT_WAKE_LOCK, MyService.class.getName());
wakeLock.acquire();
if (wakeLock != null) {
wakeLock.acquire(1000);
wakeLock.release();
}
}
這裡要注意的是,PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK兩個要同時存在,只有寫任一一個都不會有效果。
再來透過監聽螢幕的狀態來決定是否需要喚醒螢幕
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON) ) {
Log.d(TAG, "Screen On");
}
else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.d(TAG, "Screen Off");
}
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver, filter);
Place your comment