[英]How to close an activity when the phone state goes to idle?
我想知道當電話狀態變為空閑時如何關閉活動。 當電話狀態從服務變為“摘機”時,我可以打開一個活動。 現在,我需要結束該活動。 任何幫助,將不勝感激。
這是我的代碼:
public class OnCallListener extends Service {
PhoneStateListener phoneStateListener;
TelephonyManager mgr;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
mgr= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
Intent i=new Intent(getBaseContext(),OnCall.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
//mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
}
if(state==TelephonyManager.CALL_STATE_IDLE)
{
**//Here i want to close the activity which i opened in "Off-Hook" state**
}
}
};
mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
return super.onStartCommand(intent, flags, startId);
}
}
以包含標記(例如,額外的標記)的意圖開始該活動,以告訴您的活動結束
在您的活動中,您可以重寫onNewIntent()以讀取該標志,並在活動打算finish()
調用finish()
。
您可以從服務發送本地廣播,以通知活動關閉自身。 在您活動的onResume中,注冊該特定廣播並調用finish()。 例如:
服務代碼:
Intent i = new Intent(MyActivity.ACTION_COMPLETED);
LocalBroadcastManager.getInstance(this).sendBroadcast(i);
活動代碼:
@Override
public void onResume() {
super.onResume();
IntentFilter f = new IntentFilter(ACTION_COMPLETED);
LocalBroadcastManager.getInstance(this).registerReceiver(onPhoneIdle, f);
}
@Override
public void onPause() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(onPhoneIdle);
super.onPause();
}
private BroadcastReceiver onPhoneIdle = new BroadcastReceiver() {
public void onReceive(Context context, Intent i) {
finish();
}
}
如果您想關閉活動,只需執行
像這樣在您的活動中編寫廣播接收器
private final BroadcastReceiver mybroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
在您的onCreate方法中注冊它:
onCreate(){
registerReceiver(mybroadcast, new IntentFilter("brcdt"));
}
不要忘記注銷它:
onDestroy(){
unregisterReceiver(mybroadcast);
}
發送廣播以撤消您要關閉活動的Boradcast接收器
sendBroadcast(new Intent("brcdt"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.