tai*_*eng 8 android sleep alarmmanager wakelock wear-os
当Android Wear进入睡眠模式(屏幕变暗)时,我的代码的某些部分不会被执行.我在后台服务中使用Timer来触发某些操作,例如将数据从磨损发送到移动设备,但数据不会被发送.当我点击屏幕将其唤醒时发送.
当屏幕关闭时,我也尝试使用Timer触发振动通知,但直到我点击屏幕才会出现.
在调试模式(蓝牙或USB),数据发送和通知工作正常.
我怀疑这是因为当Android Wear处于睡眠模式时,其CPU工作在最低级别,因为Timer仍在运行,但不适用于GoogleApiClient,IntentService或Notification.
我已经尝试了很多方法来唤醒CPU,例如AlarmManager,PowerManager,Wakelock,但它不适用于Android Wear.
有人遇到过这个问题吗?解决办法是什么?
小智 3
PowerManger每次我从所处理的设备收到消息时,我都会唤醒我的可穿戴设备。不要忘记释放PowerManager.WakeLock
public abstract class WatchFaceActivity extends Activity {
private PowerManager.WakeLock mWakeLock;
private Handler mWakeLockHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clock_watch_face);
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
mWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "MyWakelockTag");
mWakeLockHandler = new Handler();
IntentFilter messageFilter = new IntentFilter("message-forwarded-from-data-layer");
MessageReceiver messageReceiver = new MessageReceiver();
LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, messageFilter);
}
public class MessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (!mWakeLock.isHeld()) {
mWakeLock.acquire();
}
mWakeLockHandler.removeCallbacksAndMessages(null);
mWakeLockHandler.postDelayed(mReleaseRunnable, 5000);
}
}
private Runnable mReleaseRunnable = new Runnable() {
@Override
public void run() {
mWakeLock.release();
}
};
@Override
protected void onDestroy() {
super.onDestroy();
mWakeLockHandler.removeCallbacksAndMessages(null);
mWakeLock.release();
}
}
Run Code Online (Sandbox Code Playgroud)
并在清单中允许 WAKE_UP 权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4224 次 |
| 最近记录: |