上图
上代码:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=findViewById(R.id.gain_permission);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (hasPermisson()){
Toast.makeText(MainActivity.this, "我有权限", Toast.LENGTH_SHORT).show();
}else {
requestPermission();
}
}
});
}
/*
* 判断是否有权限
* */
private boolean hasPermisson(){
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
return checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED;
}else {
return true;
}
}
/*
*
* 请求权限
* */
private void requestPermission(){
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
/* if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)!=true){
Toast.makeText(this, "请在设置中配置授权", Toast.LENGTH_SHORT).show();
}*/
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,},1);
}
}
}
shouldShowRequestPermissionRationale(String permission):
根据测试shouldShowRequestPermissionRationale的返回值主要以下几种情况 :
第一次打开App时 false
上次弹出权限点击了禁止(但没有勾选“下次不在询问”) true
上次选择禁止并勾选:下次不在询问 false
把注释部分取消掉注释在运行一次,效果图: