Android で例外「開くに失敗しました: EACCES (権限が拒否されました)」が発生する 質問する

Android で例外「開くに失敗しました: EACCES (権限が拒否されました)」が発生する 質問する

私は

オープンに失敗しました:EACCES (Permission denied)

ライン上でOutputStream myOutput = new FileOutputStream(outFileName);

ルートを確認して、試してみましたandroid.permission.WRITE_EXTERNAL_STORAGE

この問題を解決するにはどうすればいいでしょうか?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

ベストアンサー1

Google はAndroid Qに、外部ストレージのフィルター表示という新機能を追加しました。これを簡単に修正するには、AndroidManifest.xml ファイルに次のコードを追加します。

<manifest ... >
    <!-- This attribute is "false" by default on apps targeting Android Q. -->
    <application android:requestLegacyExternalStorage="true" ... >
     ...
    </application>
</manifest>

詳細については、こちらをご覧ください:https://developer.android.com/training/data-storage/use-cases

編集:この回答は Android 11 では古くなっているため、反対票が集まり始めています。この回答を見た人は、上記のリンクにアクセスして手順を読んでください。

おすすめ記事