[解決済み] APIレベル29で非推奨となったEnvironment.getExternalStorageDirectory() java
質問
アンドロイドの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
は、特定の種類のメディア (例: 画像) のためのものです。 このサンプルアプリ ウェブサイトからMP4ビデオをダウンロードする際のデモです。
また
Uri.fromFile
と
ACTION_MEDIA_SCANNER_SCAN_FILE
はAndroid 7.0+でクラッシュするはずです。
FileUriExposedException
. Android Q では
MediaStore
/
insert()
オプションを指定すると、コンテンツは
MediaStore
を素早く表示します。
Android 10 および 11 では、以下のようなスコープ付きストレージの変更から逃れることができます。
targetSdkVersion
が30未満であれば
android:requestLegacyExternalStorage="true"
の中に
<application>
要素を使用します。
これは長期的な解決策ではありません
として、あなたの
targetSdkVersion
は、Play ストア(およびおそらく他の場所)でアプリを配布する場合、2021 年のある時点で 30 以上にする必要があります。
関連
-
[解決済み] Android getResources().getDrawable() 非推奨 API 22
-
アンドロイドスタジオでJunitのエラー問題を解決する
-
指定された子にはすでに親がいます。まず、その子の親に対して removeView() をコールする必要があります。
-
repo: コマンドが見つかりません
-
[解決済み] メソッドを廃止または非推奨としてマークする方法は?
-
[解決済み] Android 6.0 Marshmallow (API 23) で getColor(int id) が非推奨になりました。
-
[解決済み] なぜJavaのVector(およびStack)クラスは時代遅れ、または非推奨とされているのですか?
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] APIレベルの変更 Android Studio
-
[解決済み] Android Nで非推奨となったHtml.fromHtmlについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NetworkOnMainThreadException
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
Androidで発生した問題、解決策とヒント
-
を作ってください。*** makeするルールがない エラーの原因、分析、解決策
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
Android TextViewにandroid:ellipsize=endのバグがある。
-
AndroidでListViewを使ってカスタムテーブルを描画する
-
Android Bluetooth 開発の基本プロセス
-
SpinnerのOnItemSelectedListenerのonItemSelectedメソッドの4つのパラメーターの意味
-
android studioが新しいプロジェクトを作成しますが、プロジェクトの同期に成功するまでデザインエディタが使用できません。