0

私のアプリには、特定の時間に RTC_WAKEUP のアラームによって呼び出されるブロードキャスト レシーバーがあります。このレシーバーは、最初に部分的なロックを取得して終了しないようにし、条件をチェックします。それが true の場合は、完全なロックを取得してキーガードのロックを解除することにより、電話を完全にオンにするアクティビティを開始します。

少しのテストと試行の後、Broadcast レシーバーのライフサイクルはアクティビティを開始する前に終了し、終了するとすぐに部分ロックが解除されることがわかりました。

  • デバイスがスリープ状態にある場合、完全なロックを取得できるようにアクティビティが開始されるのでしょうか?

  • または、ブロードキャストレシーバーが終了するとすぐに、デバイスはスリープ状態に戻り、アクティビティの開始は、再びウェイクアップするまで延期されますか?

4

2 に答える 2

2
  1. BroadcastReceiver でアクティビティを開始する場合は、次のフラグを追加することを忘れないでください: FLAG_ACTIVITY_NEW_TASK

     public void onReceive(Context context, Intent i) {
      if (check condition) {
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         intent.setClass(context,THE_ACTIVTY_YOU_WANT_TO_START.class);
        context.startActivity(intent);
            } 
    
     }
    
  2. FULL_WAKE_LOCK を使用して強制的に画面をオンにするには、onCreate() メソッドに以下のコードを追加します。

    pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    
        km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
        kl = km.newKeyguardLock("info");
        wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
                | PowerManager.ACQUIRE_CAUSES_WAKEUP
                | PowerManager.ON_AFTER_RELEASE, "info");
        kl.disableKeyguard();
    
于 2012-12-30T15:14:45.130 に答える
0

GCM マニュアルを調べているときに、次の章を見つけました。

http://developer.android.com/google/gcm/gcm.html#handling_intents

BroadcastReceiver#onReceive にいる間に WakeLock を取得する必要があると思います。IntentService で静的な WakeLock を使用します。

于 2013-01-21T14:07:10.010 に答える