2017-09-09 3 views
-2

J'ai le code suivant:FileWriter fw = nouveau FileWriter (vcfFile); se bloque sur API 18

File vcfFile = new File(this.getExternalFilesDir(null), "generated.vcf"); 
FileWriter fw = new FileWriter(vcfFile); 
fw.write("BEGIN:VCARD\r\n"); 
... 

Il fonctionne très bien sur les nouvelles API, mais sur l'API 18, il se bloque. Je pense que c'est la raison, mais je ne trouve pas de solution de rechange. C'est la caractéristique principale de l'application, donc l'enlever n'est pas vraiment une option pour moi.

+1

Pouvez-vous poster la partie des autorisations de votre manifeste? – FWeigl

+0

@Ascorbin Il n'y a pas d'autorisations, l'application n'a pas besoin d'au moins sur les API plus récentes. Quelles permissions devrais-je implémenter? – JDoeDoeDoeJ

Répondre

1

Vous devez détenir l'autorisation WRITE_EXTERNAL_STORAGE pour écrire sur getExternalFilesDir() sous Android 4.3 et versions antérieures. Seulement sur Android 4.4+ pouvez-vous l'ignorer pour cet endroit.

0

Vous devez disposer des droits d'écriture sur le stockage externe. Avec la nouvelle API, vous devez à la fois déclarer l'autorisation dans le manifest et demander l'autorisation pendant l'exécution.

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.WRITE_EXTERNAL_STORAGE) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 

     // Show an explanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
       MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); 

     // MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

Vous pouvez vérifier ce lien pour plus de détails: https://developer.android.com/training/permissions/requesting.html