首先需要在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;
}
}
}
如果用户拒绝,为什么不执行此方法?后期了解。