1

所以我一直在嘗試註冊Intent.ACTION_DREAMING_STARTEDAndroidManifest內沒有成功。註冊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的日誌。


然而,當我在ActivityonCreate方法定義接收器,像這樣:

 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); 

我確實收到每當我的設備進入/離開遐想日誌。 是否有一個原因,我在我的AndroidManifest定義的BroadcastReceiver沒有趕上意圖是什麼?

顯然,根據該Intent reference

FYI這不需要任何許可,Android KitKat上運行4.4

回答

4

不幸的是DREAMING_STARTEDDREAMING_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

公共靜態最終詮釋FLAG_RECEIVER_REGISTERED_ONLY
如果設置,發送廣播只有註冊的接收器時,將 稱爲 - 沒有廣播接收器組件將被推出。

因此,您無法接收AndroidManifest.xml中聲明的BroadcastReceiver這些意圖。你唯一的選擇是動態的BroadcastReceiver註冊。

+0

謝謝!完美的答案! – Snaker