Android KitKat 4.4.2バージョンは、writeaccess用に実装された新しいgoogleポリシーです。これは今のところわかりません。
私は他のアプリでこの問題についてたくさん読みました。 「EACCES許可が拒否されました」を取得します。私のアプリは、zipファイルを書き/解凍する必要があり、sqlite-databaseにも書きます。
Androidバージョン4.4.2 KitKatを使用して、このEACCES許可拒否問題を解決するにはどうすればよいですか?
xda forum ;でこの問題の有効な解決策を見つけました。応援する必要はありません。
例を次に示します。
/**
* Returns an OutputStream to write to the file. The file will be truncated immediately.
*/
public OutputStream write()
throws IOException {
if (file.exists() && file.isDirectory()) {
throw new IOException("File exists and is a directory.");
}
// Delete any existing entry from the media database.
// This may also delete the file (for media types), but that is irrelevant as it will be truncated momentarily in any case.
String where = MediaStore.MediaColumns.DATA + "=?";
String[] selectionArgs = new String[] { file.getAbsolutePath() };
contentResolver.delete(filesUri, where, selectionArgs);
ContentValues values = new ContentValues();
values.put(MediaStore.Files.FileColumns.DATA, file.getAbsolutePath());
Uri uri = contentResolver.insert(filesUri, values);
if (uri == null) {
// Should not occur.
throw new IOException("Internal error.");
}
return contentResolver.openOutputStream(uri);
}
ドキュメントから:
Android 4.4から、複数の外部ストレージデバイスがContext.getExternalFilesDirs()、Context.getExternalCacheDirs()、およびContext.getObbDirs()を通じて開発者に表示されます。 。
これらのAPIを通じて表示される外部ストレージデバイスは、デバイスの半永久的な部分である必要があります(バッテリコンパートメントのSDカードスロットなど)。開発者は、これらの場所に保存されたデータが長期間にわたって利用できることを期待しています。このため、一時的なストレージデバイス(USB大容量ストレージドライブなど)は、これらのAPIを介して表示されるべきではありません。
WRITE_EXTERNAL_STORAGEパーミッションは、デバイス上のプライマリ外部ストレージへの書き込みアクセスのみを許可する必要があります。合成されたアクセス許可で許可されているパッケージ固有のディレクトリを除き、アプリはセカンダリ外部ストレージデバイスへの書き込みを許可しないでくださいアンインストール。
次のように、リアルタイムで許可についてAndroidに問い合わせる必要があります。
private static final int MY_PERMISSIONS_REQUEST_STORAGE = 123456;
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(), new String[]{Android.Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_STORAGE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Intent chooserIntent = cameraHelper.openImageIntent();
startActivityForResult(chooserIntent, MY_PERMISSIONS_REQUEST_STORAGE);
}
}
}
}
現時点で唯一の解決策は、電話をルート化し、ファイルエクスプローラーを使用してルートディレクトリからext sdcardのアクセス許可を変更することによってのみ解決できることです。サムスンギャラクシーS5 S4注3と注2のような携帯電話で。
この苦い事実を投稿してすみません。
この状況から抜け出すことができるグーグル自体からの更新を期待しましょう。
ただし、JBはAndroidの最も便利なOSであるため、jellybeanをKitKatに更新する前に考えてください。また、b/w JBとKitKatの差はそれほど大きくありません。
私が助けてくれたことを願って......