从设置屏幕返回后启动一个操作(Android)

5

我的场景:

  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
2个回答

12

通过调用startActivityForResult(intent, requestCode)使用 singleTask启动模式启动一个Activity,会立即返回取消结果。您可以在调试器中看到,在系统设置 Activity 开始之前就已经调用了onActivityResult()

作为快速解决方法,我建议使用一个指示是否调用了设置Activity 的标志。例如:

  1. 设置一个标志

private boolean flag = false;
  • 使用startActivity()代替startActivityForResult()

  • @Override
    public void onClick(DialogInterface arg0, int arg1) {
        startActivity(new Intent(Settings.ACTION_SETTINGS));
        flag = true;
    }
    
  • 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()方法,在这里您可以获取您的位置。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接