Open alwaystest opened 8 years ago
标签(空格分隔): Android
Android 6.0 以上增加了运行时权限,为了图方便,直接使用Google官方的EasyPermissions 0.1.9.
刚开始ReadME没有读清楚,犯了点小错误。记录一下。
文档的Basic这么写:
have your Activity (or Fragment) override the onRequestPermissionsResult method
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } }
因为是一个回调方法,我以为需要首先有一个地方调用申请权限的方法,然后又在onCreate里面调用了下面的方法。申请权限。
onCreate
private void requestPermission(){ String[] perms = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE}; if (!EasyPermissions.hasPermissions(this, perms)) { EasyPermissions.requestPermissions(this, getString(R.string.all_permission_retionale), REQUEST_PERMISSION, perms); } }
结果发现申请权限的窗口弹出了两次(拒绝给权限的情况下)。
最后发现,只要做了Basic的部分,Activity启动的时候就会自动检测需要申请的权限并自动申请。多加了一个申请权限的方法,就会导致出现两次申请权限的窗口。
所以应该是Activity里重写onRequestPermissionsResult方法,让应用自动检测权限(偷懒的办法,不推荐只做这么一次检测)。当调用需要权限的方法的时候,还需要再检测一次需要的权限,不然会崩溃的。
onRequestPermissionsResult
还有一个地方需要注意,如果应用没有使用AppCompat主题,EasyPermissions弹出Dialog的时候会导致Crash。
EasyPermissions
EasyPermissions使用
标签(空格分隔): Android
Android 6.0 以上增加了运行时权限,为了图方便,直接使用Google官方的EasyPermissions 0.1.9.
刚开始ReadME没有读清楚,犯了点小错误。记录一下。
文档的Basic这么写:
因为是一个回调方法,我以为需要首先有一个地方调用申请权限的方法,然后又在
onCreate
里面调用了下面的方法。申请权限。结果发现申请权限的窗口弹出了两次(拒绝给权限的情况下)。
最后发现,只要做了Basic的部分,Activity启动的时候就会自动检测需要申请的权限并自动申请。多加了一个申请权限的方法,就会导致出现两次申请权限的窗口。
所以应该是Activity里重写
onRequestPermissionsResult
方法,让应用自动检测权限(偷懒的办法,不推荐只做这么一次检测)。当调用需要权限的方法的时候,还需要再检测一次需要的权限,不然会崩溃的。还有一个地方需要注意,如果应用没有使用AppCompat主题,
EasyPermissions
弹出Dialog的时候会导致Crash。