我有一项服务可以在特定事件发生时启动活动。然后,此活动启动振动器。当我进行主要活动时,一切正常,但是,当设备被锁定时,它只会振动一次然后停止。这是我的代码服务代码示例
public class VService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
getV();
return START_STICKY;
}
public class getV() {
if (value > 10) {
Intent alarmIntent = new Intent(getBaseContext(), Alarm.class);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT):
alarmIntent.putExtra("v", value);
getApplication().startActivity(alarmIntent);
}
}
我的 Alarm 类的逻辑如下...... OnCreate 使用启动振动
vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); long[]
pattern = {0, 100, 1000}; vib.vibrate(pattern, 0);
OnDestory 使用 vib.cancel() 停止 vib;调用 vib.cancel() 的唯一其他地方是在处理程序中检查 v 是否小于 10,但这不是原因,因为我没有使 v 小于 10。 vib.cancel(); 也可以通过按下按钮来调用。
我看过的区域 - 这仅在屏幕关闭时发生,所以它可能与我的 onCreate 相关,我在哪里执行唤醒锁释放?
Runnable releaseWakelock = new Runnable() {
@Override
public void run() {
getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
if (mWakeLock != null && mWakeLock.isHeld()) {
mWakeLock.release();
}
}
};
或者我的简历,它基本上调用相同的东西,但使用电源服务来打开屏幕。
所以我的问题是,为什么我的振动器在屏幕关闭时启动 AlarmClass 时只振动一次,但在屏幕打开时工作得很好?我一直在努力解决这个问题,感谢您的任何意见或帮助。
编辑:可运行在警报类的 onCreate 中执行。以下是在 onResume 类中执行的。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
// Acquire wakelock
PowerManager pm = (PowerManager) getApplicationContext()
.getSystemService(Context.POWER_SERVICE);
if (mWakeLock == null) {
mWakeLock = pm
.newWakeLock(
(PowerManager.FULL_WAKE_LOCK
| PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP),
TAG);
}
if (!mWakeLock.isHeld()) {
mWakeLock.acquire();
Log.i(TAG, "Wakelock aquired!!");
}