2016-09-30 30 views
-1

我见过SO问题Can you request permissions synchronously in Android Marshmallow (API 23)'s runtime permissions model?。答案是不。等待,直到在Android中收到请求结果

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

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; 
    } 
} 

但是,我不知道我的方法是否是好的,安全,高效。

+1

'onCreate'中的while(!hasGotPermissionRequestResult){}'? ...基本上它不好,既不安全也不高效...并且prolly不起作用 – Selvin

+0

经验法则:从不使用繁忙的等待循环。尤其不在UI线程上 –

回答

0

那么,你想达到什么根本是不可能的,但有几种方法来解决这个问题:

  1. permission只会授予触发的方法,你想调用。
  2. 如果你想使用户只使用你的应用程序,因为该特定permission是如此重要,以至于你的应用程序不会function没有它,然后用一个受过教育的屏幕,告诉用户你为什么会想用这个permission介绍屏幕有点方式。

我已经创建了一个库只是为这种情况的其中library简化Permissions你,它也可以作为一个独立的Activity有一个介绍您permission。你可以在Github中检查出它吗?PermissionHelper Github