从设置屏幕 android 返回时启动操作

问题描述 投票:0回答:2

我的场景:

  1. 我要开启一个活动
  2. 我正在进行验证(检查互联网)
  3. 验证错误时,启动警报对话框
  4. 现在我进入设置,按返回键启用互联网恢复 按钮
  5. 对话框并未关闭,它仍然在屏幕中
  6. 我的目标是当我从设置返回时重新启动活动 屏幕

代码

public void open(){
        final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage(getApplicationContext().getResources().getString(R.string.searchFilterLocationMessage));
        alertDialogBuilder.setPositiveButton(R.string.Ok, 
                new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                /*Intent intent = new Intent(Settings.ACTION_SETTINGS) ;
                this.startActivity(intent);
                 */
                startActivityForResult(new Intent(Settings.ACTION_SETTINGS), 0);


            }
        });
        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 0) {
            Intent intent = getIntent();
        finish();
        startActivity(intent);
        }
    }//onActivityResult
java android android-activity android-alertdialog
2个回答
12
投票
通过调用

Activity
singleTask
启动模式启动
startActivityForResult(intent, requestCode)
会立即返回取消结果。您可以在调试器中看到,甚至在系统设置
onActivityResult() 启动之前就调用了
Activity

作为一种快速解决方法,我建议使用一个标志来指示设置

Activity

 是否被调用。喜欢

  1. 设置标志

    private boolean flag = false;
    
    
  2. 使用

    startActivity()

     而不是 startActivityForResult()

    @Override public void onClick(DialogInterface arg0, int arg1) { startActivity(new Intent(Settings.ACTION_SETTINGS)); flag = true; }
    
    
  3. 检查

    onResume()

    中的标志
    
    

    @Override protected void onResume(){ super.onResume(); if (flag) { startActivity(new Intent(this, MainActivity.class)); finish(); } }
    
    

1
投票
启动设置意图:

startActivity(new Intent(Settings.ACTION_SETTINGS));

并在

onResume() 方法中获取当前的 Activity

public void onResume(){ super.onResume(); // Do your work }

从设置屏幕返回后,您的

onResume()

方法将被调用,在这里您可以获取您的位置。

© www.soinside.com 2019 - 2024. All rights reserved.