2010-07-21 2 views

Répondre

46

Vous devez d'abord vous assurer que votre application a l'autorisation d'écrire sur la carte SD. Pour ce faire, vous devez ajouter l'autorisation d'utilisation pour enregistrer le stockage externe dans le fichier manifeste de votre application. Voir Setting Android Permissions

Ensuite, vous pouvez vous pouvez télécharger l'URL d'un fichier sur la carte SD. Une façon simple est:

URL url = new URL ("file://some/path/anImage.png"); 
InputStream input = url.openStream(); 
try { 
    //The sdcard directory e.g. '/sdcard' can be used directly, or 
    //more safely abstracted with getExternalStorageDirectory() 
    File storagePath = Environment.getExternalStorageDirectory(); 
    OutputStream output = new FileOutputStream (new File(storagePath,"myImage.png")); 
    try { 
     byte[] buffer = new byte[aReasonableSize]; 
     int bytesRead = 0; 
     while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) { 
      output.write(buffer, 0, bytesRead); 
     } 
    } finally { 
     output.close(); 
    } 
} finally { 
    input.close(); 
} 

EDIT: Put permission manifeste

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+1

@Paresh: Merci, j'ai mis à jour le code pour utiliser 'getExternalStorageDirectory()'. Savez-vous si cela renvoie une barre oblique? par exemple. '/ sdcard' ou'/sdcard/' – Akusete

+1

Votre question est sans intérêt car' Environment.getExternalStorageDirectory() 'ne renvoie pas' String' et votre code n'est donc pas compilé. J'ai corrigé ton code pour toi. –

+3

qu'est-ce qu'un aReasonableSize ?? –

8

Un excellent exemple se trouve dans le latest post sur le blog de développeur Android:

static Bitmap downloadBitmap(String url) { 
    final AndroidHttpClient client = AndroidHttpClient.newInstance("Android"); 
    final HttpGet getRequest = new HttpGet(url); 

    try { 
     HttpResponse response = client.execute(getRequest); 
     final int statusCode = response.getStatusLine().getStatusCode(); 
     if (statusCode != HttpStatus.SC_OK) { 
      Log.w("ImageDownloader", "Error " + statusCode + 
       " while retrieving bitmap from " + url); 
      return null; 
     } 

     final HttpEntity entity = response.getEntity(); 
     if (entity != null) { 
      InputStream inputStream = null; 
      try { 
       inputStream = entity.getContent(); 
       final Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
       return bitmap; 
      } finally { 
       if (inputStream != null) { 
        inputStream.close(); 
       } 
       entity.consumeContent(); 
      } 
     } 
    } catch (Exception e) { 
     // Could provide a more explicit error message for IOException or 
     // IllegalStateException 
     getRequest.abort(); 
     Log.w("ImageDownloader", "Error while retrieving bitmap from " + url, 
      e.toString()); 
    } finally { 
     if (client != null) { 
      client.close(); 
     } 
    } 
    return null; 
} 
+4

Cela ne décrit pas comment enregistrer l'image sur la carte SD, seulement comment télécharger l'image en mémoire. –

+1

Comment cette réponse at-elle obtenu 9 upvotes?! ... –

Questions connexes