簡體   English   中英

在BroadcastReceiver中結束Android活動?

[英]End Android Activity in a BroadcastReceiver?

我從電話接收到振鈴廣播時正在啟動一項活動,但是一旦接聽或中止電話,這並不會結束(或關閉)。 如果不能確定該如何做,我需要結束其他活動。 最好的方法是什么?

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?
        }
    }
}

您可以使用LocalBroadcast ManageronReceive內的else語句中發送本地廣播消息。 在活動中(您要關閉),您可以注冊接收器以接收本地廣播。 無論何時調用else部分,您都可以發送本地廣播,您的Activity將接收該廣播。 然后在您的活動中,您可以調用finish()

對於LocalBroadcastManager ,文檔說:

它是在過程中注冊Intent廣播並將其發送到本地對象的助手。 與使用sendBroadcast(Intent)發送全局廣播相比,這具有許多優勢。 其中之一是,您正在廣播的數據不會離開您的應用程序,因此無需擔心泄漏私人數據。

此廣播僅在您的應用本地播放。 因此也是安全的。 您可以在此處查看如何使用它: 如何使用LocalBroadcastManager? 希望對您有幫助。

您可以將活動對象作為參數傳遞給BroadcastReceiver的構造函數。 然后調用activity.finish()結束活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM