gpt4 book ai didi

android - API 级别 29 java 中不推荐使用 Environment.getExternalStorageDirectory()

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:23 26 4
gpt4 key购买 nike

在 android Java 上工作,最近将 SDK 更新到 API 级别 29,现在显示一条警告,指出

Environment.getExternalStorageDirectory() 在 API 级别 29 中被弃用

我的代码是

private void saveImage() {

if (requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

final String folderPath = Environment.getExternalStorageDirectory() + "/PhotoEditors";
File folder = new File(folderPath);
if (!folder.exists()) {
File wallpaperDirectory = new File(folderPath);
wallpaperDirectory.mkdirs();
}


showLoading("Saving...");
final String filepath=folderPath
+ File.separator + ""
+ System.currentTimeMillis() + ".png";
File file = new File(filepath);

try {
file.createNewFile();
SaveSettings saveSettings = new SaveSettings.Builder()
.setClearViewsEnabled(true)
.setTransparencyEnabled(true)
.build();
if(isStoragePermissionGranted() ) {
mPhotoEditor.saveAsFile(file.getAbsolutePath(), saveSettings, new PhotoEditor.OnSaveListener() {
@Override
public void onSuccess(@NonNull String imagePath) {
hideLoading();
showSnackbar("Image Saved Successfully");
mPhotoEditorView.getSource().setImageURI(Uri.fromFile(new File(imagePath)));
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.fromFile(new File(filepath))));
Intent intent = new Intent(EditImageActivity.this, StartActivity.class);
startActivity(intent);
finish();

}

@Override
public void onFailure(@NonNull Exception exception) {
hideLoading();
showSnackbar("Failed to save Image");
}
});
}

有什么替代方案?

最佳答案

使用 getExternalFilesDir() , getExternalCacheDir() , 或 getExternalMediaDirs() (关于 Context 的方法)而不是 Environment.getExternalStorageDirectory() .

或者,修改mPhotoEditor能够使用 Uri ,然后:

  • 使用 ACTION_CREATE_DOCUMENT得到 Uri到用户选择的位置,或者

  • 使用 MediaStore , ContentResolver , 和 insert()得到 Uri对于特定类型的媒体(例如图像)——参见 this sample app演示如何从网站下载 MP4 视频

另外,请注意您的 Uri.fromFileACTION_MEDIA_SCANNER_SCAN_FILE应该会在 Android 7.0+ 上崩溃并显示 FileUriExposedException .在 Android Q 上,只有 MediaStore/insert()选项将使您的内容被 MediaStore 索引很快。

请注意,您可以选择退出 Android 10 和 11 上的这些“分区存储”更改,如果您的 targetSdkVersion低于 30,使用 android:requestLegacyExternalStorage="true"<application> list 的元素。 这不是一个长期的解决方案,因为您的targetSdkVersion如果您要通过 Play 商店(可能还有其他地方)分发您的应用,则在 2021 年的某个时候需要达到 30 或更高。

关于android - API 级别 29 java 中不推荐使用 Environment.getExternalStorageDirectory(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57116335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com