使用广播接收器android关闭应用程序

时间:2015-11-25 07:24:12

标签: android broadcastreceiver broadcast

您好我正在尝试使用广播接收器来触发某些操作

  1. 活动A将广播动作“ACTION_EXIT”并进入主要活动。

  2. 每当主要活动收到广播“ACTION_EXIT”时,它都会关闭该应用。

  3. 我在活动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接收广播时,app应该关闭   恢复)

1 个答案:

答案 0 :(得分:2)

MainActivity正在运行时ActivityA暂停,在此期间您的Receiver未注册,因此无法获得广播。您可以通过结果转发来完成您想要的任务。

MainActivity中,使用LoginActivity方法启动startActivityForResult(),并覆盖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,将其设置为结果,然后完成活动。

boolean shouldExit = ...            

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

然后结果会传回MainActivity。这也可以仅使用结果代码完成,但我更喜欢使用Intent附加功能。