「Android/VideoView/ダウンロード」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→サンプル) |
(→上記サンプルDLの使い方) |
||
行104: | 行104: | ||
==上記サンプルDLの使い方== | ==上記サンプルDLの使い方== | ||
<pre> | <pre> | ||
+ | private VideoDownloaderConnectionListener mediaDownloaderLisener = new VideoDownloaderConnectionListener() { | ||
+ | public void downloadSuccess() { | ||
+ | } | ||
+ | public void downloadFailed() { | ||
+ | } | ||
+ | }; | ||
VideoDownloaderConnection connection = new VideoDownloaderConnection(MainActivity.this.getApplicationContext()); | VideoDownloaderConnection connection = new VideoDownloaderConnection(MainActivity.this.getApplicationContext()); | ||
connection.setUrl("~.mp4"); | connection.setUrl("~.mp4"); | ||
+ | connection.setListener(mediaDownloaderLisener); | ||
connection.execute(); | connection.execute(); | ||
</pre> | </pre> |
2018年11月21日 (水) 14:48時点における版
事前ダウンロードして動画表示
サンプル
VideoDownloaderConnection.java
import android.content.Context; import android.os.AsyncTask; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.FileOutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; class VideoDownloaderConnection extends AsyncTask<Void, Long, Boolean> { private String TAG = "VideoDownloaderConnection"; private Context context; String url = ""; VideoDownloaderConnectionListener listener; public VideoDownloaderConnection(Context context) { this.context = context; } public void setUrl(String url) { this.url = url; } public void setListener(VideoDownloaderConnectionListener listener) { this.listener = listener; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Boolean doInBackground(Void... params) { URL u = null; InputStream is = null; try { u = new URL(url); is = u.openStream(); HttpURLConnection huc = (HttpURLConnection)u.openConnection(); int size = huc.getContentLength(); if (huc != null) { String fileName = "FILE.mp4"; String storagePath = context.getExternalCacheDir().toString(); File f = new File(storagePath,fileName); FileOutputStream fos = new FileOutputStream(f); byte[] buffer = new byte[1024]; int len1 = 0; if (is != null) { while ((len1 = is.read(buffer)) > 0) { fos.write(buffer,0, len1); } } if (fos != null) { fos.close(); } } } catch (MalformedURLException mue) { mue.printStackTrace(); if (listener != null) { listener.downloadFailed(); } } catch (IOException ioe) { ioe.printStackTrace(); if (listener != null) { listener.downloadFailed(); } } finally { try { if (is != null) { is.close(); } } catch (IOException ioe) { if (listener != null) { listener.downloadFailed(); } } } return true; } @Override protected void onProgressUpdate(Long... values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); Log.i(TAG, "onPostExecute"); if (listener != null) { listener.downloadSuccess(); } } }
VideoDownloaderConnectionListener.java
public interface GNSMediaDownloaderListener { void downloadSuccess(); void downloadFailed(); }
上記サンプルDLの使い方
private VideoDownloaderConnectionListener mediaDownloaderLisener = new VideoDownloaderConnectionListener() { public void downloadSuccess() { } public void downloadFailed() { } }; VideoDownloaderConnection connection = new VideoDownloaderConnection(MainActivity.this.getApplicationContext()); connection.setUrl("~.mp4"); connection.setListener(mediaDownloaderLisener); connection.execute();
ストレージをcachedirとしているがいろいろ変更できる
String storagePath = context.getExternalCacheDir().toString(); // cachedir String storagePath = Environment.getExternalStorageDirectory().toString(); // sdcard
参考:http://blog.lciel.jp/blog/2014/02/08/android-about-storage/
上記DLしたmp4のvideoViewでの再生
mVideoView.setVideoPath(getApplicationContext().getExternalCacheDir().toString() + "/FILE.mp4");
参考
動画のダウンロード https://blog.engineer.adways.net/entry/2016/09/03/010627
Webview download/cache video https://stackoverflow.com/questions/23876103/webview-download-cache-video
YoutubeDownloadMp4 https://stackoverflow.com/questions/7203047/code-for-download-video-from-youtube-on-java-android