Android 目标 SDK 版本 33
权限为READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE和CAMERA
在OnCreate方法中我调用ActivityCompat.requestPermissions
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setNavigationBarColor(mContext.getResources().getColor(R.color.water_color));
}
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
requestStoragePermission();
}
}
按照此处提出的示例: ActivityCompat.requestPermissions 在 Android 中不显示对话框
@RequiresApi(api = Build.VERSION_CODES.M)
private void requestStoragePermission() {
if (ContextCompat.checkSelfPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& ContextCompat.checkSelfPermission(this,
android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
return;
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE)) {
}
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
}
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
android.Manifest.permission.CAMERA)) {
}
ActivityCompat.requestPermissions(this, new String[]
{
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.CAMERA
}, STORAGE_PERMISSION);
}
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == STORAGE_PERMISSION) {
//If permission is granted
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(mContext, mContext.getString(R.string.permission_granted), Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, mContext.getString(R.string.permission_denied), Toast.LENGTH_SHORT).show();
}
}
}
带有权限请求的对话框不会出现,实际上,当触发 onRequestPermissionsResult 方法时,我只看到指示权限被拒绝的 toast
最终在Manifest文件中获得权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
在 33,34 设备上,您不应再请求 WRITE/READ_EXTERNAL_STORAGE。
默认情况下,您对外部存储上的所有公共目录拥有写入权限。