2021 Aug. 09.
2021 Jun. 20.
インストール端末
androidバージョン7(APIレベル24)
androidバージョン10(APIレベル29)
compileSdkVersion 29
minSdkVersion 24
targetSdkVersion 29
AndroidManifest.xml
ファイルアクセスパーミッション設定は、Androidバージョン9(APIレベル28)までは必要だが、バージョン10(APIレベル29)以降は必要ない。
次の設定を要する。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
サンプル
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="PACKAGE.PROJECT"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" /> <application </application> </manifest>
kotlinコード
context.getExternalFilesDirs(null) を使う
サンプル
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) binding.btnGetSDPath.setOnClickListener { // btnGetSDPath: Button View val listStrPaths: List<String>? listStrPaths = getSdCardFilesDirPathListForLollipop(this) var strPaths = "" for (eachPath in listStrPaths) { strPaths = "$strPaths $eachPath" } binding.TVPaths.text = strPaths // TVPaths: Text View } } /** * https://rasumus.hatenablog.com/entry/2021/06/13/182210 より。 * SDカードのfilesディレクトリパスのリストを取得する。 * Android5.0以上対応。 * * @param context * @return SDカードのfilesディレクトリパスのリスト */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) fun getSdCardFilesDirPathListForLollipop(context: Context): List<String> { val sdCardFilesDirPathList: MutableList<String> = ArrayList() // getExternalFilesDirsはAndroid4.4から利用できるAPI。 // Externalfilesディレクトリのリストを取得できる。 val dirArr: Array<File> = context.getExternalFilesDirs(null) for (dir in dirArr) { val path: String = dir.absolutePath // isExternalStorageRemovableはAndroid5.0から利用できるAPI。 // 取り外し可能かどうか(SDカードかどうか)を判定している。 if (Environment.isExternalStorageRemovable(dir)) { // 取り外し可能であればSDカード。 if (!sdCardFilesDirPathList.contains(path)) { sdCardFilesDirPathList.add(path) } } else { // 取り外し不可能であれば内部ストレージ。 continue } } return sdCardFilesDirPathList } }