国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android所有版本的存儲權限適配

這篇具有很好參考價值的文章主要介紹了Android所有版本的存儲權限適配。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ? ? ? ? ? ?第一步:在Manifest文件添加如下權限
?? ? ? ? <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" tools:ignore="ScopedStorage"/>
? ? ? ? ? ? ?<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
?? ? ? ? <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

? ? ? ? ?android:requestLegacyExternalStorage="true"
?? ? ? ? 第二步:定義以下常量
?? ? ? ? private static final int REQUEST_CODE_FOR_READ_MEDIA_IMAGES_PERMISSION_FROM_ANDROID_13 = 0x00000003;
? ? ? ? ? ? ?private static final int REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FROM_ANDROID_10_TO_ANDROID_12 = 0x00000005;
? ? ? ? ? ? ?private static final int REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FOR_ANDROID_6_TO_ANDROID_9 = 0x00000006;
?? ? ? ? 第三步:在需要寫入文件的地方編寫以下代碼
? ? ? ? ? ? java.io.OutputStream outputStream = null;
? ? ? ? ? ? java.lang.String errorMessage = "";
? ? ? ? ? ? java.lang.String fileName = "test_導出資料_" + java.lang.System.currentTimeMillis() + ".xls";
? ? ? ? ? ? if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號是大于等于安卓6.0以上的版本,需要檢查運行時的危險權限");
? ? ? ? ? ? ? ? if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號是大于等于安卓10.0以上的版本,說明是只能用媒介存儲寫入文件和讀取文件");
? ? ? ? ? ? ? ? ? ? if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號是大于等于安卓13.0以上的版本,換成檢查Media聲音和Media視頻和Media圖片的權限");
? ? ? ? ? ? ? ? ? ? ? ? int checkSelfPermissionResultForReadMediaImages = checkSelfPermission(android.Manifest.permission.READ_MEDIA_IMAGES);
? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "checkSelfPermissionResultForReadMediaImages->" + checkSelfPermissionResultForReadMediaImages);
? ? ? ? ? ? ? ? ? ? ? ? if (checkSelfPermissionResultForReadMediaImages == android.content.pm.PackageManager.PERMISSION_GRANTED) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "已經(jīng)授予媒介圖片的讀取權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.net.Uri uri = android.provider.MediaStore.Files.getContentUri("external");
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.content.ContentValues contentValues = new android.content.ContentValues();
? ? ? ? ? ? ? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.DISPLAY_NAME, fileName);
? ? ? ? ? ? ? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.MIME_TYPE, "application/x-xls");
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.content.ContentResolver contentResolver = getContentResolver();
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.net.Uri uriForInsertResult = contentResolver.insert(uri, contentValues);
? ? ? ? ? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? outputStream = contentResolver.openOutputStream(uriForInsertResult);
? ? ? ? ? ? ? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? errorMessage = "需要授予權限";
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "沒有授予媒介圖片的讀取權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "現(xiàn)在執(zhí)行請求讀取媒介圖片的權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? java.lang.String[] permission = new java.lang.String[1];
? ? ? ? ? ? ? ? ? ? ? ? ? ? permission[0] = android.Manifest.permission.READ_MEDIA_IMAGES;
? ? ? ? ? ? ? ? ? ? ? ? ? ? requestPermissions(permission, REQUEST_CODE_FOR_READ_MEDIA_IMAGES_PERMISSION_FROM_ANDROID_13);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? int checkSelfPermissionResultForReadExternalStorage = checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE);
? ? ? ? ? ? ? ? ? ? ? ? int checkSelfPermissionResultForWriteExternalStorage = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "檢測完讀取媒介圖片權限之后再檢測外部存儲讀取權限看看->" + checkSelfPermissionResultForReadExternalStorage);
? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "檢測完讀取媒介圖片權限之后再檢測外部存儲寫入權限看看->" + checkSelfPermissionResultForWriteExternalStorage);
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號時介于10.0到12.0之間的,通過android.provider.MediaStore獲取外部存儲目錄");
? ? ? ? ? ? ? ? ? ? ? ? if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "安卓11或者安卓12通過Environment的isExternalStorageManager方法檢查是否有權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (android.os.Environment.isExternalStorageManager()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "在安卓11或者安卓12中有讀寫文件的權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.net.Uri uri = android.provider.MediaStore.Files.getContentUri("external");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.content.ContentValues contentValues = new android.content.ContentValues();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.DISPLAY_NAME, fileName);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.MIME_TYPE, "application/x-xls");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.content.ContentResolver contentResolver = getContentResolver();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.net.Uri uriForInsertResult = contentResolver.insert(uri, contentValues);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? outputStream = contentResolver.openOutputStream(uriForInsertResult);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? errorMessage = "需要授予權限";
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "安卓11或者安卓12的邏輯請求權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? intent.addCategory("android.intent.category.DEFAULT");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? intent.setData(android.net.Uri.parse(String.format("package:%s",getApplicationContext().getPackageName())));
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? startActivityForResult(intent, REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FROM_ANDROID_10_TO_ANDROID_12);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } catch (Exception e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Intent intent = new Intent();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? intent.setAction(android.provider.Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? startActivityForResult(intent, REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FROM_ANDROID_10_TO_ANDROID_12);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "在安卓10版本中沿用之前的檢查方法");
? ? ? ? ? ? ? ? ? ? ? ? ? ? int checkSelfPermissionResultForReadExternalStorage = androidx.core.app.ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE);
? ? ? ? ? ? ? ? ? ? ? ? ? ? //int checkSelfPermissionResultForWriteExternalStorage = androidx.core.app.ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "checkSelfPermissionResultForReadExternalStorage->" + checkSelfPermissionResultForReadExternalStorage);
? ? ? ? ? ? ? ? ? ? ? ? ? ? //android.util.Log.d("debug", "checkSelfPermissionResultForWriteExternalStorage->" + checkSelfPermissionResultForWriteExternalStorage);
? ? ? ? ? ? ? ? ? ? ? ? ? ? //boolean isHavePermission = checkSelfPermissionResultForReadExternalStorage == android.content.pm.PackageManager.PERMISSION_GRANTED && checkSelfPermissionResultForWriteExternalStorage == android.content.pm.PackageManager.PERMISSION_GRANTED;
? ? ? ? ? ? ? ? ? ? ? ? ? ? if (checkSelfPermissionResultForReadExternalStorage == android.content.pm.PackageManager.PERMISSION_GRANTED) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "已經(jīng)授予外部存儲寫入權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.net.Uri uri = android.provider.MediaStore.Files.getContentUri("external");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.content.ContentValues contentValues = new android.content.ContentValues();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.DISPLAY_NAME, fileName);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.MIME_TYPE, "application/x-xls");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.content.ContentResolver contentResolver = getContentResolver();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.net.Uri uriForInsertResult = contentResolver.insert(uri, contentValues);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? outputStream = contentResolver.openOutputStream(uriForInsertResult);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? errorMessage = "需要授予權限";
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "沒有授予外部存儲寫入權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "現(xiàn)在執(zhí)行請求外部存儲寫入的權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "安卓10的邏輯請求權限");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? java.lang.String[] permission = new java.lang.String[2];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? permission[0] = android.Manifest.permission.READ_EXTERNAL_STORAGE;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? permission[1] = android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? requestPermissions(permission, REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FROM_ANDROID_10_TO_ANDROID_12);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號是介于6.0到9.0之間,仍然是可以從Environment類的getExternalStorageDirectory方法獲取外部存儲目錄的,但是前提是要檢查運行時權限");
? ? ? ? ? ? ? ? ? ? int checkSelfPermissionResultForWriteExternalStorage = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
? ? ? ? ? ? ? ? ? ? if (checkSelfPermissionResultForWriteExternalStorage == android.content.pm.PackageManager.PERMISSION_GRANTED) {
? ? ? ? ? ? ? ? ? ? ? ? java.io.File externalStorageDirectory = android.os.Environment.getExternalStorageDirectory();
? ? ? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "安卓系統(tǒng)是在6.0到9.0之間的,通過Environment類獲取到外部存儲目錄->" + externalStorageDirectory.getPath());
? ? ? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? outputStream = new java.io.FileOutputStream(externalStorageDirectory.getPath() + java.io.File.separator + fileName);
? ? ? ? ? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? errorMessage = "需要授予權限";
? ? ? ? ? ? ? ? ? ? ? ? java.lang.String[] permission = new java.lang.String[1];
? ? ? ? ? ? ? ? ? ? ? ? permission[0] = android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
? ? ? ? ? ? ? ? ? ? ? ? requestPermissions(permission, REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FOR_ANDROID_6_TO_ANDROID_9);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號小于6.0以下的版本,不需要檢查運行時權限");
? ? ? ? ? ? ? ? java.io.File externalStorageDirectory = android.os.Environment.getExternalStorageDirectory();
? ? ? ? ? ? ? ? android.util.Log.d("debug", "直接通過Environment類的getExternalStorageDirectory()即可獲取外部存儲目錄->" + externalStorageDirectory.getPath());
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? outputStream = new java.io.FileOutputStream(externalStorageDirectory.getPath() + java.io.File.separator + fileName);
? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? if (outputStream != null) {
? ? ? ? ? ? ? ? //file write
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, errorMessage, android.widget.Toast.LENGTH_LONG).show();
? ? ? ? ? ? }


?? ? ? ?第四步:權限請求回調(diào)函數(shù)
?? ? ? ?@Override
? ? public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
? ? ? ? super.onRequestPermissionsResult(requestCode, permissions, grantResults);
? ? ? ? if (requestCode == REQUEST_CODE_FOR_READ_MEDIA_IMAGES_PERMISSION_FROM_ANDROID_13) {
? ? ? ? ? ? if (grantResults.length > 0 && grantResults[0] == android.content.pm.PackageManager.PERMISSION_GRANTED) {
? ? ? ? ? ? ? ? if (permissions.length > 0) {
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "打印授予的權限->" + permissions[0]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? java.lang.String fileName = "buyup_導出資料_" + java.lang.System.currentTimeMillis() + ".xls";
? ? ? ? ? ? ? ? java.lang.String errorMessage = "";
? ? ? ? ? ? ? ? java.io.OutputStream outputStream = null;
? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號是大于等于安卓10.0以上的版本,說明是只能用媒介存儲寫入文件和讀取文件");
? ? ? ? ? ? ? ? android.net.Uri uri = android.provider.MediaStore.Files.getContentUri("external");
? ? ? ? ? ? ? ? android.content.ContentValues contentValues = new android.content.ContentValues();
? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.DISPLAY_NAME, fileName);
? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.MIME_TYPE, "application/x-xls");
? ? ? ? ? ? ? ? android.content.ContentResolver contentResolver = getContentResolver();
? ? ? ? ? ? ? ? android.net.Uri uriForInsertResult = contentResolver.insert(uri, contentValues);
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? outputStream = contentResolver.openOutputStream(uriForInsertResult);
? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (outputStream != null) {
? ? ? ? ? ? ? ? ? ? //file write
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, errorMessage, android.widget.Toast.LENGTH_LONG).show();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? if (permissions.length > 0) {
? ? ? ? ? ? ? ? ? ? java.lang.String permission0 = permissions[0];
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "打印請求的權限->" + permission0);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? android.util.Log.d("debug", "權限授予失敗");
? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, "權限授予失敗", android.widget.Toast.LENGTH_LONG).show();
? ? ? ? ? ? }
? ? ? ? } else if (requestCode == REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FOR_ANDROID_6_TO_ANDROID_9) {
? ? ? ? ? ? if (grantResults.length > 0 && grantResults[0] == android.content.pm.PackageManager.PERMISSION_GRANTED) {
? ? ? ? ? ? ? ? if (permissions.length > 0) {
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "來自安卓6.0到安卓9.9之間的請求權限,打印授予的權限->" + permissions[0]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? java.lang.String fileName = "buyup_導出資料_" + java.lang.System.currentTimeMillis() + ".xls";
? ? ? ? ? ? ? ? java.lang.String errorMessage = "";
? ? ? ? ? ? ? ? java.io.OutputStream outputStream = null;
? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號是大于等于安卓6.0到安卓9.0之間的,通過用android.os.Environment類獲取外部存儲");
? ? ? ? ? ? ? ? java.io.File externalStorageDirectory = android.os.Environment.getExternalStorageDirectory();
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? outputStream = new java.io.FileOutputStream(externalStorageDirectory.getPath() + java.io.File.separator + fileName);
? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (outputStream != null) {
? ? ? ? ? ? ? ? ? ? //file write
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, errorMessage, android.widget.Toast.LENGTH_LONG).show();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? if (permissions.length > 0) {
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "來自安卓6.0到安卓9.9之間的請求權限,打印拒絕的權限->" + permissions[0]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? android.util.Log.d("debug", "來自安卓6.0到安卓9.9之間的請求權限,權限授予失敗");
? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, "權限授予失敗", android.widget.Toast.LENGTH_LONG).show();
? ? ? ? ? ? }
? ? ? ? } else if (requestCode == REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FROM_ANDROID_10_TO_ANDROID_12) {
? ? ? ? ? ? if (grantResults.length > 0 && grantResults[0] == android.content.pm.PackageManager.PERMISSION_GRANTED) {
? ? ? ? ? ? ? ? if (permissions.length > 0) {
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "來自安卓10.0的版本,打印授予的權限->" + permissions[0]);
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "來自安卓10.0的版本,打印授予的權限->" + permissions[1]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? java.lang.String fileName = "buyup_導出資料_" + java.lang.System.currentTimeMillis() + ".xls";
? ? ? ? ? ? ? ? java.lang.String errorMessage = "";
? ? ? ? ? ? ? ? java.io.OutputStream outputStream = null;
? ? ? ? ? ? ? ? android.net.Uri uri = android.provider.MediaStore.Files.getContentUri("external");
? ? ? ? ? ? ? ? android.content.ContentValues contentValues = new android.content.ContentValues();
? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.DISPLAY_NAME, fileName);
? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.MIME_TYPE, "application/x-xls");
? ? ? ? ? ? ? ? android.content.ContentResolver contentResolver = getContentResolver();
? ? ? ? ? ? ? ? android.net.Uri uriForInsertResult = contentResolver.insert(uri, contentValues);
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? outputStream = contentResolver.openOutputStream(uriForInsertResult);
? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (outputStream != null) {
? ? ? ? ? ? ? ? ? ? //file write
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, errorMessage, android.widget.Toast.LENGTH_LONG).show();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? if (permissions.length > 0) {
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "來自安卓10.0的版本,打印拒絕的權限->" + permissions[0]);
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "來自安卓10.0的版本,打印拒絕的權限->" + permissions[1]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, "權限授予失敗", android.widget.Toast.LENGTH_LONG).show();
? ? ? ? ? ? }
? ? ? ? }
? ? }


? ? 第五步:針對安卓11或者安卓12版本的請求權限方法
? ? @Override
? ? protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
? ? ? ? super.onActivityResult(requestCode, resultCode, data);
? ? ? ? if (requestCode == REQUEST_CODE_FOR_WRITE_EXTERNAL_STORAGE_PERMISSION_FROM_ANDROID_10_TO_ANDROID_12) {
? ? ? ? ? ? android.util.Log.d("debug", "在安卓11或者安卓12系統(tǒng)中引導到系統(tǒng)設置界面開啟權限回來");
? ? ? ? ? ? if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
? ? ? ? ? ? ? ? if (android.os.Environment.isExternalStorageManager()) {
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "已經(jīng)授予外部存儲寫入權限");
? ? ? ? ? ? ? ? ? ? java.io.OutputStream outputStream = null;
? ? ? ? ? ? ? ? ? ? java.lang.String errorMessage = "";
? ? ? ? ? ? ? ? ? ? java.lang.String fileName = "buyup_導出資料_" + java.lang.System.currentTimeMillis() + ".xls";
? ? ? ? ? ? ? ? ? ? android.util.Log.d("debug", "設備系統(tǒng)的版本號時介于10.0到12.0之間的,通過android.provider.MediaStore獲取外部存儲目錄");
? ? ? ? ? ? ? ? ? ? android.net.Uri uri = android.provider.MediaStore.Files.getContentUri("external");
? ? ? ? ? ? ? ? ? ? android.content.ContentValues contentValues = new android.content.ContentValues();
? ? ? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.DISPLAY_NAME, fileName);
? ? ? ? ? ? ? ? ? ? contentValues.put(android.provider.MediaStore.MediaColumns.MIME_TYPE, "application/x-xls");
? ? ? ? ? ? ? ? ? ? android.content.ContentResolver contentResolver = getContentResolver();
? ? ? ? ? ? ? ? ? ? android.net.Uri uriForInsertResult = contentResolver.insert(uri, contentValues);
? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? outputStream = contentResolver.openOutputStream(uriForInsertResult);
? ? ? ? ? ? ? ? ? ? } catch (java.io.IOException ioException) {
? ? ? ? ? ? ? ? ? ? ? ? ioException.printStackTrace();
? ? ? ? ? ? ? ? ? ? ? ? errorMessage = ioException.getMessage();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? if (outputStream != null) {
? ? ? ? ? ? ? ? ? ? ? ? //file write
? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, errorMessage, android.widget.Toast.LENGTH_LONG).show();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? android.widget.Toast.makeText(this, "需要授予權限才能導出文件!", android.widget.Toast.LENGTH_SHORT).show();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }文章來源地址http://www.zghlxwxcb.cn/news/detail-796324.html

到了這里,關于Android所有版本的存儲權限適配的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Android版本實現(xiàn)root權限(本辦法適用于所有android平臺)

    本方法適用于所有Android版本 userdebug和user版本 關閉selinux system/core 修改su.cpp,注釋用戶組權限檢測 system/extras/su/su.cpp diff --git a/su/su.cpp b/su/su.cpp index 1a1ab6bf..af3d2a68 100644 --- a/su/su.cpp +++ b/su/su.cpp @@ -80,8 +80,8 @@ void extract_uidgids(const char* uidgids, uid_t* uid, gid_t* gid, gid_t* gids, i } int ma

    2024年02月06日
    瀏覽(18)
  • android studio開發(fā)——android11版本以上權限動態(tài)申請問題,包括文件讀寫、圖片、相機的調(diào)用

    用于android手機的升級,現(xiàn)在已經(jīng)是android13版本了,對于權限問題可能更加敏感了,前段時間開發(fā)發(fā)現(xiàn)之前的方法已經(jīng)不再適用于android11以后的版本了 讀寫權限申請最好是跳轉(zhuǎn)到設置中進行才是最好了,下面我們開始進行 首先是AndroidManifest.xml文件的權限 然后這里講解一下權

    2024年02月10日
    瀏覽(21)
  • Android12中藍牙權限適配

    AndroidManifest.xml 代碼 說明: 必須按照這兩步申請藍牙權限, 首先 在androidManifest.xml中配置藍牙權限,Android11及以下android.permission.BLUETOOTH、android.permission.BLUETOOTH_ADMIN申請這兩個,Android12中藍牙權限進行新增android.permission.BLUETOOTH_SCAN、android.permission.BLUETOOTH_ADVERTISE、android.permi

    2024年02月11日
    瀏覽(27)
  • 【Android 10 適配】隱私權限變更

    更詳細內(nèi)容請參考 Android 10 中的隱私權變更 Android 10(API 級別 29)引入了多項功能和行為變更,旨在更好地保護用戶的隱私。這些變更讓用戶更清楚地了解并更好地控制自己的數(shù)據(jù)及為應用提供的權能。 下面是 Android 10 中與 隱私權限 相關的主要變更。 默認情況下,以 Andr

    2024年01月22日
    瀏覽(24)
  • android開發(fā)在android13中存儲權限發(fā)生變化,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE無法使用

    原來的兩個存儲權限在android13中已經(jīng)無法使用 在android13中讀取圖片需要以下權限: 視頻權限: 音頻權限: 如果需要訪問pdf,word等其他類型文件,請使用以下權限:

    2024年02月01日
    瀏覽(32)
  • android11 申請所有文件訪問權限

    android11 申請所有文件訪問權限

    Android 11 引入了強制執(zhí)行分區(qū)存儲的限制,導致應用默認不能訪問外部文件。 針對以前涉及較多文件的操作,可采用申請所有文件訪問權限的方式來解決這一問題,實現(xiàn)方式如下。 (雖然這樣做安全性低,官方并不推薦這樣,但確實最快適配原有應用程序的方式) 1. Android

    2024年02月04日
    瀏覽(28)
  • Android 10-11適配外部存儲方案

    Android 10-11適配外部存儲方案

    Android Api 29 對文件和文件夾進行了重大更改。不允許使用外部存儲,如下方法: Environment.getExternalStorageDirectory() = /mnt/sdcard ? Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test 只能使用內(nèi)部存儲 getExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/test getExternalF

    2024年02月06日
    瀏覽(23)
  • Android低版本(4.4)okhttp 網(wǎng)絡適配

    Android低版本(4.4)okhttp 網(wǎng)絡適配

    目錄 訪問網(wǎng)絡時,出現(xiàn)錯誤: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb7eabc88: Failure in SSL library, usually a protocol error? ? error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version (external/openssl/ssl/s23_clnt.c:741 0xa4fb8d5c:0x00000000) SSLSocket的setEnabledProtocols配置支持TLSv1.1,

    2024年01月17日
    瀏覽(24)
  • Android Studio 所有歷史版本下載

    Android Studio 所有歷史版本下載

    本篇文章將給大家講解如何下載Android Studio的過往歷史版本,以及解決看到的歷史版本不完整的問題。 打開歷史版本的Android Studio官網(wǎng)下載地址:下載地址 點擊我同意按鈕 這時候就可以看到歷史版本了 我們會發(fā)現(xiàn)這里的歷史版本并不完整,這時我們切換一下語言為英文 切換

    2024年02月10日
    瀏覽(24)
  • Android將Uri轉(zhuǎn)為路徑字符串(適配安卓全版本)并使用第三方應用打開文件(適配Android7.0+)

    做這個功能時在網(wǎng)上找了無數(shù)篇例子,有些方法是有問題的,故自己寫一篇完整實現(xiàn)的總結(jié),作備忘也作案例。順便說一句,Android對存儲權限的給予真的越來越嚴格 目錄 1.Uri轉(zhuǎn)為路徑String以獲得文件名? 2.獲取文件后綴名 3.通過后綴名獲取文件MIME類型? 4.設置Intent的Uri與權限

    2024年02月19日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包