1

特定のイベントが発生したときにアクティビティを開始するサービスがあります。このアクティビティは、バイブレーターを開始します。主な活動中はすべて正常に動作しますが、デバイスがロックされている場合、振動は 1 回だけで、その後停止します。ここに私のコードサービスコードのサンプルがあります

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 未満にしていないため、これが理由になることはありません。ボタンを押しても呼び出されます。

私が見た領域-これは画面がオフのときにのみ発生するため、ウェイクロックのリリースを行う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 が起動されたときにバイブレーターが 1 回だけ振動するのに、画面がオンのときに完全に正常に動作するのはなぜですか? 入力やヘルプに感謝します。

編集:ランナブルは 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!!");
    }
4

0 に答える 0