振动停止了,我不知道为什么

时间:2014-06-13 20:58:15

标签: android android-lifecycle wakelock android-vibration

我有一项服务,可以在特定事件发生时启动活动。然后,此活动启动振动器。当我在我的主要活动中时,一切正常,但是,当设备被锁定时,它只振动一次然后停止。以下是我的代码服务代码

的示例
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.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时振动一次,但在屏幕打开时工作得非常好?我一直试图解决这个问题,感谢任何意见或帮助。

编辑: runnable在Alarm类的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!!");
    }

0 个答案:

没有答案