4

アラームを設定するために次のコードを使用しています。

Intent intent = new Intent(context, Receiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(reminderContext, 0, intent,
    PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis()+delay,pendingIntent);

アラームが鳴ると、同じコードを実行して新しいアクティビティを表示し、サウンドが再生されます。これは良いことですが、デバイスがスリープ モードの場合、アラームが鳴ると音だけが聞こえます。アクティビティが表示されず、デバイスがスリープ モードのまま表示されます。

アラームが鳴ったときにデバイスを自動的に起動するにはどうすればよいですか?

編集:

私は次のことを試しました:

PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();

KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); 
KeyguardLock keyguardLock =  keyguardManager.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();

これを除いて、それはうまくいくように見えました:

04-10 13:49:59.260: A/PowerManager(4292): WakeLock finalized while still held: TAG

さらに、取得方法について次の警告があります。

wakelock acquire() が見つかりましたが、release() 呼び出しはどこにもありません

4

2 に答える 2

8

Receiverアクティビティで次のコードを試してください。

Window wind;
wind = this.getWindow();
wind.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
wind.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
wind.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
于 2013-04-10T11:13:17.970 に答える