簡體   English   中英

使用廣播接收器Android關閉應用

[英]Using broadcast receiver android to close app

您好,我正在嘗試使用廣播接收器觸發一些操作

  1. 活動A將廣播動作“ ACTION_EXIT”並進入主活動。

  2. 只要主要活動收到廣播“ ACTION_EXIT”,它就會關閉該應用。

我在活動A上的代碼(發送廣播)

Intent broadcastIntent = new Intent(Beacon_MainActivity.this, MainActivity.class);
broadcastIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
broadcastIntent.setAction("com.package.ACTION_EXIT");
sendBroadcast(broadcastIntent);
finish();

主要活動的代碼以接收廣播並觸發ACTION_EXIT

private void registerReceiver(){
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.package.ACTION_EXIT");
        registerReceiver(myBroadcastReceiver, intentFilter);
    }

@Override
public void onResume() {
    registerReceiver();
    super.onResume();

}

@Override
public void onPause() {
    super.onPause();
    unregisterReceiver(myBroadcastReceiver);
}

BroadcastReceiver myBroadcastReceiver =
        new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.d("onReceive", "Logout in progress");
                Toast.makeText(MainActivity.this, "what the ****", Toast.LENGTH_SHORT).show();
                finish();
            } 
        };

不知道為什么它不起作用,任何人都可以提供幫助,不勝感激

(當Main_Activity在恢復時收到廣播時,應用程序應該關閉)

ActivityA運行時,您的MainActivity會暫停,在此期間,您的Receiver尚未注冊,因此無法廣播。 您可以通過結果轉發來完成所需的操作。

MainActivity ,使用startActivityForResult()方法啟動LoginActivity ,並重寫onActivityResult()方法以處理結果。

public static final int REQUEST_CODE = 0;
public static final String EXTRA_EXIT = "exit";
...

Intent actLogin = new Intent(this, LoginActivity.class);
startActivityForResult(actLogin, REQUEST_CODE);
...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(requestCode) {
        case REQUEST_CODE:
            if(data == null) {
                return;
            }

            boolean shouldExit = data.getBooleanExtra(EXTRA_EXIT, false);

            if(shouldExit) {
                finish();
            }
            break;
        ...
    }
}

然后,在LoginActivity ,加FLAG_ACTIVITY_FORWARD_RESULT用來啟動意圖ActivityA

Intent actA = new Intent(this, ActivityA.class);
actA.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(actA);
finish();

ActivityA ,設置一個boolean值以指示是否退出,將其添加到結果Intent ,將其設置為結果,然后完成Activity。

boolean shouldExit = ...            

Intent result = new Intent();
result.putExtra(MainActivity.EXTRA_EXIT, shouldExit);
setResult(Activity.RESULT_OK, result);
finish();

然后將結果傳送回MainActivity 這也可以只用結果代碼來完成,但是我更喜歡使用Intent Extras。

暫無
暫無

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

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