プロが教える店舗&オフィスのセキュリティ対策術

【前提・実現したいこと】
SDカード(外部ストレージ)のフォルダ内にあるファイルに書き込みを行いたいのです。

【発生している問題・エラーメッセージ】
ファイルに書き込みを行う処理で catch (FileNotFoundException e)でエラーを拾われて、書き込みができません。

言語:Java
try {
File fStatusFile = new File(sLicenseStatusFile);
fOutStream = new FileOutputStream(fStatusFile, false);
fOutStream.write(sLicenseStatus.getBytes());

} catch (FileNotFoundException e) {
ShowMsgDialog("書き込みができません" + sLicenseStatusFile);

return false;
}

【試したこと】
Android6.0以降からpermissionがAndroidManifestだけではだめなものがあると
知ったので実際に、プログラムコードの中でストレージの読み書き権限の確認と
許可を得る作業を実装しました。

また、端末の「設定」→「アプリ」から該当するアプリを選択して権限を確認しました。
結果は、
「SDカードのコンテンツの変更または削除」
「SDカードコンテンツの読み取り」
が許可されていました。

【Runtime Permission部分】
書き込みの処理の前に呼び出しています。

言語:Java
private static final int REQUEST_EXTERNAL_STORAGE_CODE = 0x01;
private static String[] mPermissions = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};

private static void verifyStoragePermissions(Activity activity) {
int readPermission = ContextCompat.checkSelfPermission(activity, mPermissions[0]);
int writePermission = ContextCompat.checkSelfPermission(activity, mPermissions[1]);

if (writePermission != PackageManager.PERMISSION_GRANTED ||
readPermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
activity,
mPermissions,
REQUEST_EXTERNAL_STORAGE_CODE
);
}
}

【補足情報】
Android Studio2.3.3
SDKのAPIは25
OSのAndroidバージョンは7.1 です。

過去の同じような事例を参考に試してみましたが上手くいきません。
ファイルを書き込むためのルートパスも間違っていない上に、
権限が許可となっているのに書き込みができないとはどういうことでしょうか?
よろしくお願いいたしま す。

A 回答 (1件)

SDカードを取り外し、PCに接続、ファイルを読み取り(「読み取り専用」のチェックを外し)、ファイルを編集し、SDカードに保存し、Android機器に挿入しては?


(SDカード/CD/DVDなどの外部メディアに書き込んだファイルは読み取り専用ファイルになり、直接編集できないかも)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!