首先需要在Manifast.xml文件中声明我想获取的权限:
<uses-permission android:name="android.permission.INTERNET"/> <!--WIFI可以不加--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
然后,在程序中,询问用户,可以打开权限进行设置:
//询问用户权限 //测试访问用户权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { /** * 可以同时询问开启两个权限 * ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, *Manifest.permission.ACCESS_FINE_LOCATION}, 1); */ ActivityCompat.requestPermissions( this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } else{ StartMethod(); }
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); //这里实现用户操作,或同意或拒绝的逻辑 /*grantResults会传进android.content.pm.PackageManager.PERMISSION_GRANTED 或 android.content.pm.PackageManager.PERMISSION_DENIED两个常, 前者代表用户同意程序获取系统权限,后者代表用户拒绝程序获取系统权限*/ //Log.d(TAG,"requestCode:------"+requestCode); if(requestCode==1){ switch (grantResults[0]){ case 0: Log.d(TAG,"_________ok"); StartMethod(); break; case 1: Log.d(TAG,"_________no"); break; } } }
如果用户拒绝,为什么不执行此方法?后期了解。