[英]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 Manager從onReceive
內的else
語句中發送本地廣播消息。 在活動中(您要關閉),您可以注冊接收器以接收本地廣播。 無論何時調用else
部分,您都可以發送本地廣播,您的Activity將接收該廣播。 然后在您的活動中,您可以調用finish()
。
對於LocalBroadcastManager
,文檔說:
它是在過程中注冊Intent廣播並將其發送到本地對象的助手。 與使用sendBroadcast(Intent)發送全局廣播相比,這具有許多優勢。 其中之一是,您正在廣播的數據不會離開您的應用程序,因此無需擔心泄漏私人數據。
此廣播僅在您的應用本地播放。 因此也是安全的。 您可以在此處查看如何使用它: 如何使用LocalBroadcastManager? 。 希望對您有幫助。
您可以將活動對象作為參數傳遞給BroadcastReceiver的構造函數。 然后調用activity.finish()結束活動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.