2013-08-22 61 views
0

所以我正在製作一個應用程序,用於偵聽Android中的屏幕開啓活動。我有一臺廣播接收器,收到Intent.ACTION_SCREEN_ON。這個接收器然後開始一個活動。廣播接收機中的多個意圖

一切工作正常,但它啓動活動,即使因爲來電打開屏幕。

這是我的代碼。

if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){ 
    Intent i = new Intent(context, MainScreenActivity.class); 
    i.putExtras(intent); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 

    Log.e("receiver", "throwing in the lock screen"); 
} 

我不太清楚如何檢查手機的當前狀態。 我有權讀取PHONE_STATE,但我如何知道該行爲是否因該呼叫而被解僱?

此外,屏幕實際打開並顯示活動時有延遲。默認的鎖定屏幕短時間可見,然後自定義的屏幕出現。有什麼可以做的,以避免這種延遲?

回答

1

註冊這是爲了響應呼入狀態設置一個標誌,你可以在你的接收機Intent.ACTION_SCREEN_ON)檢查是否標誌已經設置,則跳到開始活動和復位標誌否則啓動活動 像

if(action.equalsIgnoreCase("android.intent.action.PHONE_STATE")) 
{ 
    if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
           TelephonyManager.EXTRA_STATE_RINGING)) 
{ 
    incomingcall = true; 
} 
} 
另一廣播接收器

,並檢查

if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){ 
if(incomingcall ==true) 
{ 
    //skip the reciver and reset flag incomingcall = false; 
} 
else{ 
Intent i = new Intent(context, MainScreenActivity.class); 
i.putExtras(intent); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 

Log.e("receiver", "throwing in the lock screen"); 
} 
} 

約有序廣播的詳細信息 http://android-developers.blogspot.in/2011/01/processing-ordered-broadcasts.html

+0

Gaurav我認爲'ACTION_SCREEN_ON'在'PHONE_STATE'之前被觸發。你知道他們被解僱的命令嗎? – Broncha

+0

您無法確定哪個意圖最先被觸發,您可以設置優先級爲您的意圖。你有沒有試過這個代碼,我認爲它應該工作。 – CodingRat

+0

來自developer.android上的文檔有序廣播(使用Context.sendOrderedBroadcast發送)一次傳遞給一個接收者。當每個接收器依次執行時,它可以將結果傳播到下一個接收器,或者它可以完全中止廣播,使其不會傳遞給其他接收器。運行的訂單接收器可以通過匹配意圖過濾器的android:priority屬性進行控制;具有相同優先級的接收器將以任意順序運行。 – CodingRat