2012-10-01 149 views
3

我想在我用下面的代碼服務中註冊接收器:Android的廣播接收器沒有收到ACTION_SCREEN_ON

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
ScreenReceiver SR = new ScreenReceiver(); 
registerReceiver(SR, filter); 

,這是我的廣播接收器:

public class ScreenReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     System.out.println("RECEIVED"); 
    } 
} 

我甚至已經宣佈它在清單,但沒有任何過濾器:

<receiver android:name=".ScreenReceiver" android:enabled="true" /> 

但無論我做什麼,我似乎無法t o當我打開我的屏幕時收到意圖。

這是intent在android ICS或JB禁用或我缺少的東西?

任何幫助,將不勝感激!

回答

7

這對我的工作在Android 4.0.4

BroadcastReceiver receiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent == null) 
      return; 
     //do something you need when broadcast received 

    } 
}; 
IntentFilter filter = new IntentFilter() 
filter.addAction(Intent.ACTION_SCREEN_ON); 
filter.addAction(Intent.ACTION_SCREEN_OFF); 

context.registerReceiver(receiver, filter); 

至於用行動Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF中的Manifest.xml它沒有幫助,因爲Android的代碼PowerManagerService.java下面登記接收:

... 
mScreenOnIntent = new Intent(Intent.ACTION_SCREEN_ON); 
mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
mScreenOffIntent = new Intent(Intent.ACTION_SCREEN_OFF); 
mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
... 
+0

你好,謝謝,但我沒有看到你的代碼與提出這個問題的人是不同的 - 我沒有看到這個人的代碼有什麼問題。你能詳細說明嗎? – ericn

+0

它主要連接到回答「是否在android ICS或JB中禁用了此意向,還是我錯過了某些內容?」。我在Android 4.0.4上使用此代碼,它對我來說非常合適。 –

+0

Android 5.1.1在這裏,謝謝你的回答。我已經嘗試了OP的方法和這種方法,出於某種原因,只有這個方法可行。你認爲這與活動中的寫作方法有關嗎(兩個代碼應該是相同的?)或者它與清單中的東西有關 –

0

也許你應該檢查哪些意圖您onReceive()方法內部發出:

if(intent.getAction().equals(Intent.ACTION_SCREEN_ON) 
{ 
    ... 
} 

此外,你試圖把一個斷點在那裏?

其他方面的建議,而不是使用System.out.println使用API​​本地日誌這將是你的情況

Log.i("ScreenReceiver""RECEIVED"); 

而且可以讀取日誌在logcat中。