2013-12-23 43 views
0

我正在從手機接收到振鈴廣播時啓動活動,但是一旦接聽或中止呼叫,此操作不會結束(或關閉)。我需要結束在我的其他活動,但如果不確定如何去做這件事?什麼是最好的方法?在BroadcastReceiver中結束Android活動?

public class CallReceiver extends BroadcastReceiver { 
    Intent i; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     assert state != null; 
     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      i = new Intent(context, IncomingCall.class); 
      i.putExtras(intent); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION); 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      context.startActivity(i); 
     } 
     else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
      // WHAT GOES HERE? 
     } 
    } 
} 

回答

3

可以使用LocalBroadcast Managerelse語句內內onReceive發送本地廣播消息。在活動中(您想要關閉),您可以註冊您的接收器以接收本地廣播。每當調用else部分時,您都可以發送本地廣播,該廣播將由您的活動收到。然後在您的活動中,您可以撥打finish()

對於LocalBroadcastManager,文檔說:

這是爲註冊和您的進程內發送意圖的廣播本地對象的輔助工具。與使用sendBroadcast(Intent)發送全局廣播相比,這具有許多優點。其中之一是您所播放的數據將不會離開您的應用程序,因此不需要擔心泄露私人數據。'

此廣播僅適用於您的應用程序。所以也是安全的。你可以在這裏看到如何使用它:how to use LocalBroadcastManager?。希望它可以幫助你。

+0

感謝這是一個非常有趣的閱讀,並幫助實現我所要求的:-) – Apqu

0

您可以將活動對象作爲參數放到BroadcastReceiver的構造函數中。然後調用activity.finish()來結束活動。