【问题标题】:Wait until permisison request result received in Android等到Android中收到权限请求结果
【发布时间】:2017-02-09 03:57:40
【问题描述】:

我见过这样的问题Can you request permissions synchronously in Android Marshmallow (API 23)'s runtime permissions model?。答案是否定的。

因此,我添加了如下代码(简化版):

public class MyActivity ... {
    private boolean hasGotPermissionRequestResult = false;

    @Override
    public void onCreate(...) {
        if (ContextCompat.checkSelfPermission(...) == PackageManager.PERMISSION_DENIED) {
            ActivityCompat.requestPermission(...);
            while (!hasGotPermissionRequestResult) {}
        }
    }

    @Override
    public void onRequestPermissionResult(...) {
        // whether granted or not
        hasGotPermissionRequestResult = true;
    }
}

但是,我不确定我的方法是否良好、安全和高效。

【问题讨论】:

  • while (!hasGotPermissionRequestResult) {} in onCreate ? ...基本上它既不好也不安全也不高效...而且prolly不会工作
  • 经验法则:永远不要使用忙等待循环。尤其是在 UI 线程上

标签: android


【解决方案1】:

嗯,你想要达到的目标根本不可能,但是有几种方法可以克服这个问题:

  1. 仅在授予permission 时触发您要调用的方法。
  2. 如果您想让用户只使用您的应用,因为那个特定的permission 非常重要,以至于您的应用没有它就无法使用function,那么请使用受过教育的屏幕来告诉用户您为什么要这样做在介绍屏幕中使用这个permission

我已经为这种场景创建了一个库,其中library 为您简化了Permissions,它也可以用作独立的Activity,其中包含您的permission 的介绍。你可以在 Github 上查看 PermissionHelper Github

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 2022-12-31
    • 2016-10-29
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多