私はAndroid開発の新人であり、JavaでgetExternalStorageDirectoryを読むためにいくつかの問題に直面しています、私は読んだ https://developer.Android.com/reference/Android/os/環境 ですが、理解できません。誰かがJavaのサンプルコードを手伝ってくれませんか。
docs から、次のことがわかります。
getExternalStoragePublicDirectory(String type)
このメソッドはAPIレベル29で廃止されました。ユーザーのプライバシーを向上させるために、共有/外部ストレージデバイスへの直接アクセスは廃止されました。アプリがBuild.VERSION_CODES.Qを対象とする場合、このメソッドから返されたパスは、アプリから直接アクセスできなくなります。アプリは、Context#getExternalFilesDir(String)、MediaStore、またはIntent#ACTION_OPEN_DOCUMENT。などの代替手段に移行することにより、共有/外部ストレージに保存されているコンテンツに引き続きアクセスできます。
この関数にパラメーターとして何も渡さないで、ディレクトリをFile
オブジェクトとして取得します。
context.getExternalFilesDir();
ここで、「コンテキスト」はthis.getContext();
によって取得されるオブジェクトです
this
は、アクティビティの現在のオブジェクトです。使用中にスコープを注意深く確認してください。
重要
内部ストレージにアクセスするには、Manifest.permission.WRITE_EXTERNAL_STORAGE
および/またはManifest.permission.READ_EXTERNAL_STORAGE
はファイル AndroidManifest.xml に必要です。
追加情報:
この静的メソッドを使用します。現在、私はこれを行うための法的な方法を見つけていません。そのため、ルートまたはgetAbsolutePathファイルパスを取得するこの静的メソッドが作成されました。
public static File getAbsoluteDir(Context ctx, String optionalPath) {
String rootPath;
if (optionalPath != null && !optionalPath.equals("")) {
rootPath = ctx.getExternalFilesDir(optionalPath).getAbsolutePath();
} else {
rootPath = ctx.getExternalFilesDir(null).getAbsolutePath();
}
// extraPortion is extra part of file path
String extraPortion = "Android/data/" + BuildConfig.APPLICATION_ID
+ File.separator + "files" + File.separator;
// Remove extraPortion
rootPath = rootPath.replace(extraPortion, "");
return new File(rootPath);
}
簡潔な答え:
String path = getContext().getExternalFilesDir(null).getAbsolutePath();