2014-11-02 127 views
1

我對android編程比較陌生,我試圖編寫一個應用程序,我想從正在監聽呼叫狀態的BroadcastReceiver開始一個活動。在實踐中,我想在打電話時開始一項活動。我現在正在做的是:Android活動丟失事件,應用程序沒有響應

public class ServiceReceiver extends BroadcastReceiver { 


    @Override 
    public void onReceive(final Context context, Intent intent) { 
     TelephonyManager telephony = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 

     int state = telephony.getCallState(); 
... 
    Intent i = new Intent(context, OnCallActivity.class); 
         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP 
           | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
         i.putExtras(bundle); 

         context.startActivity(i); 

} 

活動開始沒有做任何事情。我設法開始沒有任何問題的活動,但我得到的是一個沒有反應的應用程序。該應用程序已啓動,但後退按鈕等事件不起作用。我可以多次按下它,而無需應用程序反應,我必須殺死它。在logcat這裏是我所看到的:

11-02 13:54:19.651  918-1065/? W/InputDispatcher﹕ Asynchronous input event injection failed. 
    11-02 13:54:19.651  918-1065/? I/InputDispatcher﹕ Dropped event because the current application is not responding and the user has started interacting with a different application. 

你能至少給我一個提示,以瞭解什麼可以阻止我的應用程序?我嘗試了嚴格的模式,但我沒有得到任何意義。提前致謝。

+3

你想達到什麼目的?它不是從接收器或服務開始活動的好習慣,您應該使用通知來通知用戶或敬酒。通話活動是一項高優先級活動,必須位於最前面,以便用戶可以接聽或拒絕通話。 – iago 2014-11-17 06:06:27

+0

你是對的,我已經解決了我的問題(幾天前),就像你說的。這是實施細微的變化,但效果很好。 – Raffo 2014-11-17 11:56:43

回答

0

爲了解決這個問題,我決定改變這個問題:我只會發送一個通知,而不是啓動一個活動。這是解決這個問題的關鍵,因爲通話活動的高優先級似乎會干擾所啓動的應用程序。