2017-09-12 1 views
-1

Cela fonctionne sur mon nexus 5, mais ne fonctionne pas sur les appareils Samsung et certains appareils OEM.Pourquoi android File.delete(), File.rename() échoue sur certains appareils?

Ceci est mon code:

File f = new File(path); 
     if (f.exists()) { 

      if (f.delete()) { 
       MediaScannerConnection.scanFile(ctx, new String[]{path, ""}, null, null); 
      } else { 
       // Log.e(TAG, ctx.getString(R.string.unableToDelete)); 
      } 

     } else { Toast.makeText(ctx,ctx.getString(R.string.fileNotFound),Toast.LENGTH_SHORT).show(); 
     } 
+0

Avez-vous ajouté l'autorisation d'écriture à votre manifeste? –

+0

Oui.

+0

[Le document dit: * "Notez que la classe Files définit la méthode delete pour lancer une exception IOException lorsqu'un fichier ne peut pas être supprimé. signaler et diagnostiquer pourquoi un fichier ne peut pas être supprimé. "*] (https://developer.android.com/reference/java/io/File.html#delete()), alors peut-être utiliser' Files # delete' au lieu de 'File # delete' pour aider à déboguer le problème? – Pang

Répondre

0

Vous devez demander à l'utilisateur s'il accepte l'autorisation de lecture/écriture

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(this, new String[]{ 
        Manifest.permission.READ_EXTERNAL_STORAGE, 
        Manifest.permission.WRITE_EXTERNAL_STORAGE,}, 1); 
     } else { 
      createTemporaryFile(); 
     } 

Ne pas oublier d'ajouter le

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

J'ai un problème avec le périphérique sur Api> 24 pour l'utilisation du fichier Je dois désactiver le UriExposure

 if(Build.VERSION.SDK_INT>=24){ 
     try{ 
      Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure"); 
      m.invoke(null); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
+0

J'ai déjà la permission d'écriture accordée. Mon niveau d'API est de 19 et 16. –