簡體   English   中英

手機狀態為閑置時如何關閉活動?

[英]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.

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