ANDROID: Comment puis-je télécharger un fichier vidéo sur une carte SD?

J'ai un fichier vidéo sur un site Web au format .MP4 et je souhaite permettre à l'utilisateur de pouvoir télécharger la vidéo sur sa carte SD en cliquant sur un lien. Y a-t-il un moyen facile de faire ceci. J'ai actuellement ce code mais ça ne fonctionne pas … pas sûr de ce que je fais mal. Merci pour toute aide!

import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import org.apache.http.util.ByteArrayBuffer; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class VideoManager extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);} private final String PATH = "/sdcard/download/"; //put the downloaded file here public void DownloadFromUrl(String VideoURL, String fileName) { //this is the downloader method try { URL url = new URL("http://www.ericmoyer.com/episode1.mp4"); //you can write here any link File file = new File(fileName); long startTime = System.currentTimeMillis(); Log.d("VideoManager", "download begining"); Log.d("VideoManager", "download url:" + url); Log.d("VideoManager", "downloaded file name:" + fileName); /* Open a connection to that URL. */ URLConnection ucon = url.openConnection(); /* * Define InputStreams to read from the URLConnection. */ InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); /* * Read bytes to the Buffer until there is nothing more to read(-1). */ ByteArrayBuffer baf = new ByteArrayBuffer(50); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } /* Convert the Bytes read to a String. */ FileOutputStream fos = new FileOutputStream(PATH+file); fos.write(baf.toByteArray()); fos.close(); Log.d("VideoManager", "download ready in" + ((System.currentTimeMillis() - startTime) / 1000) + " sec"); } catch (IOException e) { Log.d("VideoManager", "Error: " + e); } } } 

  • Mettre à jour les données dans Arrayadapter
  • Comment faire un appel conditionnel invalidateOptionsMenu () en fonction du niveau API dans Android?
  • Android: comment libérer des ressources lorsque l'application se termine?
  • Le rembourrage n'affecte pas <shape> dans une mise en page XML
  • C ++ 11 std :: async dans Android NDK ne fonctionne pas
  • Comment puis-je éviter l'exécution de OnTextChanged dans EditText d'Android
  • Liste tous les certificats installés sur Android
  • Personnalisation des onglets ActionBar sur Android 4
  • Comment étaler une image dans un ImageView afin qu'il "corresponde"
  • Paramètres SQL SQL rawquery
  • Définir un élément de menu tel que vérifié à partir du code
  • Différence entre une vue AppCompat et une vue Android normale
  • 2 Solutions collect form web for “ANDROID: Comment puis-je télécharger un fichier vidéo sur une carte SD?”

    Ne manquez-vous pas de mémoire? J'imagine qu'un fichier vidéo est très grand – ce que vous protégez avant d'écrire dans un fichier.

    Je sais que votre code d'exemple est sur Internet – mais il est TROP de télécharger! Utilisez ceci:

     private final int TIMEOUT_CONNECTION = 5000;//5sec private final int TIMEOUT_SOCKET = 30000;//30sec URL url = new URL(imageURL); long startTime = System.currentTimeMillis(); Log.i(TAG, "image download beginning: "+imageURL); //Open a connection to that URL. URLConnection ucon = url.openConnection(); //this timeout affects how long it takes for the app to realize there's a connection problem ucon.setReadTimeout(TIMEOUT_CONNECTION); ucon.setConnectTimeout(TIMEOUT_SOCKET); //Define InputStreams to read from the URLConnection. // uses 3KB download buffer InputStream is = ucon.getInputStream(); BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5); FileOutputStream outStream = new FileOutputStream(file); byte[] buff = new byte[5 * 1024]; //Read bytes (and store them) until there is nothing more to read(-1) int len; while ((len = inStream.read(buff)) != -1) { outStream.write(buff,0,len); } //clean up outStream.flush(); outStream.close(); inStream.close(); Log.i(TAG, "download completed in " + ((System.currentTimeMillis() - startTime) / 1000) + " sec");5 

    N'utilisez jamais un chemin d'accès, en particulier pour le stockage externe. Votre chemin est incorrect sur de nombreux périphériques. Utilisez Environment.getExternalStoragePath() pour obtenir la racine du stockage externe (qui peut être /sdcard ou /mnt/sdcard ou autre chose).

    Assurez-vous de créer votre sous-répertoire, en utilisant l'objet File vous récupérez de Environment.getExternalStoragePath() .

    Et, enfin, ne dites pas simplement "mais ça ne fonctionne pas". Nous ne savons pas ce que "mais ne fonctionne pas" signifie dans votre cas. Sans cette information, il est très difficile de vous aider.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.