[解決済み] マシュマロでストレージのパーミッションエラーが発生する
2022-04-20 19:39:56
質問
Lollipopでは、私のアプリではダウンロード機能は問題なく動作していましたが、Marshmallowにアップグレードしたところ、インターネットからSDカードにダウンロードしようとすると、アプリがクラッシュしてこのエラーが表示されるようになりました。
Neither user nor current process has android.permission.WRITE_EXTERNAL_STORAGE
このコードの行について文句を言われる。
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
アプリケーション外のマニフェストにパーミッションがあるのですが。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
プロジェクトをクリーンアップして再構築しましたが、まだクラッシュします。
どうすればいいですか?
外部ストレージの使用許可をユーザーが与えているかどうかを確認する必要があります。
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission is granted");
//File write logic here
return true;
}
そうでない場合は、ユーザーにアプリの許可を求める必要があります。
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
もちろん、これらはマシュマロデバイス専用なので、あなたのアプリがマシュマロで動作しているかどうかを確認する必要があります。
if (Build.VERSION.SDK_INT >= 23) {
//do your check here
}
また、あなたのアクティビティが
OnRequestPermissionResult
全体のパーミッションはこのようになります。
public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
Log.v(TAG,"Permission is granted");
return true;
} else {
Log.v(TAG,"Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v(TAG,"Permission is granted");
return true;
}
}
パーミッションの結果コールバック。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
//resume tasks needing this permission
}
}
関連
-
adb devices OffLine Solution(オフラインソリューション
-
adb シェルがデバイスのオフラインを求めるプロンプトを表示する
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
アンドロイドスタジオソフトウェア使用詳細説明書
-
AndroidStudioのショートカット 検索/置換
-
android studioが新しいプロジェクトを作成しますが、プロジェクトの同期に成功するまでデザインエディタが使用できません。
-
[解決済み] ssh "パーミッションが開きすぎています "エラー
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] sudoを使わずにnpmがエラーを投げるのを修正する方法
-
[解決済み] Android 6.0 Marshmallow (API 23) で getColor(int id) が非推奨になりました。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
アンドロイドスタジオのエラーを解決する --> Error:(1, 0) id 'com.android.application' を持つプラグインが見つかりません。
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
android exception - aapt.exe has stopped working.
-
エラータイプ 3 タイプエラー, Error: アクティビティクラス{}が存在しません。アクティビティ起動時のエラー 解決方法
-
アンドロイドのエリプサイズを使用する
-
Androidプロセス生存のためのソリューション
-
SpinnerのOnItemSelectedListenerのonItemSelectedメソッドの4つのパラメーターの意味
-
アンドロイドにおけるトークンの利用