java - studio - storage permission s are required
java.io.FileNotFoundException:/storage/emulated/0/New file.txt: error al abrir: EACCES(Permiso denegado) (2)
He estado intentando cifrar archivos y volver a escribirlos en el mismo lugar. Pero recibí el mensaje de error que dice "java.io.FileNotFoundException: /storage/emulated/0/New file.txt: open failed: EACCES (Permission denied)".
error al "java.io.FileNotFoundException: /storage/emulated/0/New file.txt: open failed: EACCES (Permission denied)".
Mi archivo de Manifest
es este
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tdk.mytestapplication2">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
Creo que he proporcionado permiso correcto allí. Y el código que estoy usando para cifrar archivos es este.
public static void encrypt(SecretKey secretKey, String filePath){
try {
// Here you read the cleartext.
FileInputStream fis = new FileInputStream(filePath);
// This stream write the encrypted text. This stream will be wrapped by another stream.
FileOutputStream fos = new FileOutputStream(filePath);
// Create cipher
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// Wrap the output stream
CipherOutputStream cos = new CipherOutputStream(fos, cipher);
// Write bytes
int b;
byte[] d = new byte[8];
while ((b = fis.read(d)) != -1) {
cos.write(d, 0, b);
}
// Flush and close streams.
cos.flush();
cos.close();
fis.close();
}catch(IOException e){
e.printStackTrace();
}catch (NoSuchAlgorithmException e){
e.printStackTrace();
}catch(NoSuchPaddingException e){
e.printStackTrace();
}catch(InvalidKeyException e){
e.printStackTrace();
}
}
Y utilicé este método dentro de un botón.
Button btnEncrypt = (Button) findViewById(R.id.btnEnc);
btnEncrypt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
aesKey = EncAndDec.generateKey();
String filePath = editText.getText().toString();
//Generating the file hash
String md5Hash = MD5Hash.getMD5(filePath);
System.out.println(aesKey.toString());
System.out.println(filePath);
System.out.println(md5Hash);
//Encrypting the file
for(int i=1; i<100; i++) {
EncAndDec.encrypt(aesKey, filePath);
}
}
});
Todavía no pude configurar este error. Por favor, alguien ayude!
Implemente permisos de ejecución para ejecutar su aplicación en Android 6.0 Marshmallow (API 23) o posterior.
o puede habilitar manualmente el permiso de almacenamiento-
Ir a configuración> aplicaciones> "nombre_de_tu_app"> haga clic en él> luego haga clic en permisos> luego habilite el almacenamiento. Eso es.
Pero sugiero ir por el primero, que es Implementar permisos de tiempo de ejecución en su código.
Sospecho que está ejecutando Android 6.0 Marshmallow (API 23) o posterior. Si este es el caso, debe implementar permisos de tiempo de ejecución antes de intentar leer / escribir almacenamiento externo.