1

Так что я пытался зарегистрировать Intent.ACTION_DREAMING_STARTED внутри моего AndroidManifest без успеха.Зарегистрируйтесь для Intent.ACTION_DREAMING_STARTED в AndroidManifest

 <application> 
     ... 
      <receiver android:name=".broadcastReceivers.DreamingReceiver"> 
       <intent-filter> 
        <action android:name="android.intent.action.DREAMING_STOPPED"/> 
        <action android:name="android.intent.action.DREAMING_STARTED"/> 
       </intent-filter> 
      </receiver> 
     ... 
     </application> 

Это определение приемника.

public class DreamingReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.d("DreamingReceiver", "Intent: " + intent.getAction()); 
    } 
} 

Когда начинаются мечты, в этом BroadcastReceiver нет ни одного журнала.


Однако, когда я определяю приемник в onCreate методе мои Activity «ы так:

 this.receiver = new BroadcastReceiver() 
     { 
      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       Log.d("Activity Dreaming", "Intent: " + intent.getAction()); 
      } 
     }; 

     IntentFilter filter = new IntentFilter(Intent.ACTION_DREAMING_STARTED); 
     filter.addAction(Intent.ACTION_DREAMING_STOPPED); 

     this.registerReceiver(this.receiver, filter); 

я получить журнал всякий раз, когда мое устройство на входе/выходе грезу. Есть ли причина, почему BroadcastReceiver, который я определил в своем AndroidManifest, не поймает намерения?

Видимо, это не требует каких-либо разрешений в соответствии с Intent reference в

FYI, работающий на Android KitKat 4,4

ответ

4

К сожалению, действия DREAMING_STARTED и DREAMING_STOPPED отмеченные флагом FLAG_RECEIVER_REGISTERED_ONLY, как вы можете видеть here:

private final Intent mDreamingStartedIntent = new Intent(Intent.ACTION_DREAMING_STARTED) 
     .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
private final Intent mDreamingStoppedIntent = new Intent(Intent.ACTION_DREAMING_STOPPED) 
     .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 

Цитирование developer.android.com:

общественности статической окончательный Int FLAG_RECEIVER_REGISTERED_ONLY
Если установлено, при отправке широковещательных сообщений только зарегистрированные приемники будут называется - никакие компоненты BroadcastReceiver не будет запущен.

Таким образом, вы не можете получить эти намерения с помощью BroadcastReceiver, заявленного в AndroidManifest.xml. Ваш единственный вариант - динамически регистрировать BroadcastReceiver.

+0

Спасибо! Отличный ответ! – Snaker

Смежные вопросы