【问题标题】:Proper way to handle ACTION_MANAGE_WRITE_SETTINGS activity处理 ACTION_MANAGE_WRITE_SETTINGS 活动的正确方法
【发布时间】:2017-06-06 12:08:45
【问题描述】:

我想要写入设置权限以启动便携式 WLAN 热点...

这就是我得到的,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.System.canWrite(getApplicationContext())) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, 200);
            }
        }

这工作正常,直到我授予权限后按返回按钮。

按下返回按钮后,resultCode 始终为 0,因此进一步的代码无法正常工作。

【问题讨论】:

标签: android


【解决方案1】:

没有记录 ACTION_MANAGE_WRITE_SETTINGS 返回结果。大多数活动不返回结果。

也许它没有记录在案,但正如您注意到的那样,ACTION_MANAGE_WRITE_SETTINGS 总是有结果。虽然 resultCode 始终为 0,但结果确实会将您的原始 requestCode 交还给您。

所以你可以使用它来检查onActivityResult你现在是否拥有你请求的权限。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case REQUEST_CODE_WRITE_SYSTEM:
                boolean canWrite = Settings.System.canWrite(this);
                // Handle the result here
                break;
        }
  }

【讨论】:

【解决方案2】:

按下返回键后,resultCode 始终为 0

ACTION_MANAGE_WRITE_SETTINGS 未记录为返回结果。大多数活动不返回结果。

不要打电话给startActivityForResult()——只用startActivity()。需要时,拨打Settings.System.canWrite(this)看你是否有权限。

【讨论】:

  • 我认为这不应该是公认的答案。通常,我们使用设置。 ACTION_MANAGE_WRITE_SETTINGS 在检查 canWrite() 的结果之后,在尝试执行禁止的操作之后。因此,就用户体验而言,最好的方法是在用户从设置活动返回后继续操作——现在允许。这就是为什么最好使用 startActivityFromResult() 并查看请求代码(忽略结果代码)
猜你喜欢
  • 1970-01-01
  • 2012-06-27
  • 2010-12-08
  • 2011-02-28
  • 2016-01-15
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多