我们都知道android11之后无法随意访问手机目录,所以这会举一个简单创建指定类型路径的方法:
//保存文件到指定路径保存到相册 public String saveImageToGallery(Bitmap bitmap, String type) { Log.d(TAG, "saveImageToGallery: "); // 首先保存图片 File externalFileRootDir = getExternalFilesDir(null); do { externalFileRootDir = Objects.requireNonNull(externalFileRootDir).getParentFile(); } while (Objects.requireNonNull(externalFileRootDir).getAbsolutePath().contains("/Android")); String saveDir = Objects.requireNonNull(externalFileRootDir).getAbsolutePath(); Log.d(TAG, "saveImageToGallery saveDir: " + saveDir); String storePath = saveDir + File.separator + "dearxy"; File appDir = new File(storePath); if (!appDir.exists()) { appDir.mkdirs(); } String fileName = ""; if ("jpg".equals(type)) { fileName = System.currentTimeMillis() + ".jpg"; } else { fileName = System.currentTimeMillis() + ".png"; } File file; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { String path = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES).getPath(); file = new File(path, fileName); try { FileOutputStream fos = new FileOutputStream(file); //通过io流的方式来压缩保存图片 if ("jpg".equals(type)) { bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); } else { bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); } fos.flush(); fos.close(); // MediaStore.Images.Media.insertImage(getContentResolver(), // file.getAbsolutePath(), fileName, null); // // 最后通知图库更新 // sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, // Uri.fromFile(new File(file.getPath())))); } catch (IOException e) { e.printStackTrace(); } Log.d(TAG, "saveImageToGallery: path" + file.getAbsolutePath()); return file.getAbsolutePath(); } else { file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); //通过io流的方式来压缩保存图片 if ("jpg".equals(type)) { bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); } else { bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); } fos.flush(); fos.close(); // MediaScannerConnection.scanFile(PhotoTranDealActivity.this, // new String[]{file.toString()}, // new String[]{file.getName()}, null); } catch (IOException e) { e.printStackTrace(); } } return file.getAbsolutePath(); }
android 11手机图片保存成功