皆さん、こんにちは。

今回は、外部のSDカードへのアクセス権取得画面で、「今後表示しない」にチェックを入れられてしまったとき、どうすればいいか解説します。

先に断っておきますが、この方法は一部の端末でしかできません。Galaxy S9の最新版ではできることを確認していますが、できない端末が大半かもしれません。その時は、データを削除させるしかないと思います。

それでは、解説します。

ある日、設定画面を漁ってたらこんな物を見つけてしまいました。

タップするとアプリが並んでいて、適当にタップすると中にはなんと

こんなのがありました。今まではデータを削除させるしか、「今後表示しない」にチェックを入れられてしまったときはなかったので、これで勝ったと思いました。

このActivityはどうやって表示させるのか、QuickShortcutMakerで調べてみると、どうやら以下のクラスで起動できるらしい。

com.android.settings.Settings$DirectoryAccessSettingsActivity

なので、Intentを作り、startActivityします。

Intent().apply {
    setClassName("com.android.settings", "com.android.settings.Settings\$DirectoryAccessSettingsActivity")
    }

ただ、これだと起動できない端末が大半なので、クラスが存在するかチェックする処理をはさみます。存在しない場合はおとなしくデータ削除させます。

val isLaunchable = try {
    packageManager.getActivityInfo(ComponentName("com.android.settings", "com.android.settings.Settings\$DirectoryAccessSettingsActivity"), 0)
    true
} catch (e: PackageManager.NameNotFoundException) {
    false
}
val intent = if (isLaunchable) {
    Intent().apply {
        setClassName("com.android.settings", "com.android.settings.Settings\$DirectoryAccessSettingsActivity")
    }
} else {
    Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
        val uri = Uri.fromParts("package", packageName, null)
        this.data = uri
    }
}
startActivity(intent)

あとはその旨をユーザーに知らせればOK!

それでは、よいAndroidライフを。

コメントを残す

メールアドレスが公開されることはありません。