在本地内存中安装视频并在android中播放
如何在本地内存中安装url视频并在android中播放?你能分享关于这个的示例代码吗?我尝试了如下操作,但出现错误“Sorr,此视频无法播放”视频无法播放,但代码正在安装到视频文件中。我可以在“文件资源管理器”中看到它在本地内存中安装视频并在android中播放,android,download,android-videoview,Android,Download,Android Videoview,如何在本地内存中安装url视频并在android中播放?你能分享关于这个的示例代码吗?我尝试了如下操作,但出现错误“Sorr,此视频无法播放”视频无法播放,但代码正在安装到视频文件中。我可以在“文件资源管理器”中看到它 公共类视频存储卡扩展活动{ 私人视频视图; 私有静态最终字符串TAG=“UpdaterService”; 文件SDCardRoot; Handler asynchHandler=新处理程序(); 字符串videoLink=”http://hurriyettv.cubecdn.ne
公共类视频存储卡扩展活动{
私人视频视图;
私有静态最终字符串TAG=“UpdaterService”;
文件SDCardRoot;
Handler asynchHandler=新处理程序();
字符串videoLink=”http://hurriyettv.cubecdn.net/2014/11/19/htv_99710_240p.mp4";
String name=“blaa.mp4”;
私有更新程序;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(策略);
SDCardRoot=新文件(getFilesDir()+“/videos”);
File[]videos=SDCardRoot.listFiles();
vView=(VideoView)findViewById(R.id.vView);
试一试{
String[]fileArray=新字符串[videos.length];
对于(int i=1;i<2;i++){
fileArray[i]=视频[i].getName();
Log.i(“@Tag:file[1]”,“+fileArray[i]);
vView.requestFocus();
vView.setVideoPath(“+fileArray[i]);
vView.start();
//MediaPlayer pl=新的MediaPlayer();
//pl.setDataSource(fi.getFD());
//pl.prepare();
//pl.start();
//
}
}捕获(例外e){
//TODO:处理异常
}
/*
*Log.i(“fileeee”和“+视频[1]);
*
*vView=(VideoView)findViewById(R.id.vView);
*
*//使用此选项获取触摸事件vView.requestFocus();
*
*//从SD卡vView.setVideoPath加载视频(
*“/data/data/com.example.downlaodvideo/files/videos/blaa.mp4”);
*
*//如果要启用视频控制器(如暂停),请启用此选项
*//向前
*
*//播放电影vView.start();
*/
File SDCardRoot=新文件(VideoSaveSDCARD.this.getFilesDir()+“/”
+“视频”);
如果(!SDCardRoot.exists()){
SDCardRoot.mkdir();
}
//删除目录(SDCardRoot);
updater=新的updater();
updater.start();
}
类更新程序扩展线程{
@凌驾
公开募捐{
super.run();
下载文件(视频链接,名称);
}
}
同步布尔下载文件(字符串链接、字符串videoName){
试一试{
URL=新URL(链接);//您可以在此处写入任何链接
long startTime=System.currentTimeMillis();
Log.d(“视频管理器”,“下载开始”);
Log.d(“VideoManager”,“下载url:+url”);
Log.d(“VideoManager”,“下载文件名:“+videoName”);
/*打开到该URL的连接*/
URLConnection ucon=url.openConnection();
/*
*定义要从URLConnection读取的InputStreams。
*/
InputStream=ucon.getInputStream();
BufferedInputStream bis=新的BufferedInputStream(is);
/*
*将字节读取到缓冲区,直到没有更多内容可读取(-1)。
*/
ByteArrayBuffer baf=新ByteArrayBuffer(50);
int电流=0;
而((当前=bis.read())!=-1){
baf.append((字节)当前值);
}
/*将读取的字节转换为字符串*/
FileOutputStream fos=新的FileOutputStream(新文件(SDCardRoot,
视频名称);
fos.write(baf.toByteArray());
fos.close();
Log.d(“视频管理器”,
“下载准备就绪”
+((System.currentTimeMillis()-startTime)/1000)
+“sec”);
返回true;
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回false;
}
公共字符串getDataFromPortal(字符串remoteUrl,字符串myString){
字符串数据=null;
DefaultHttpClient httpclient=新的DefaultHttpClient();
HttpGet-HttpGet=newhttpget(remoteUrl+myString);
试一试{
HttpResponse response1=httpclient.execute(httpGet);
InputStream is=response1.getEntity().getContent();
数据=getStringFromInputStream(is);
返回数据;
}捕获(客户端协议例外e){
//TODO自动生成的捕捉块
日志d(标签“互联网YK第1条”);
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
日志d(标签“互联网YK第2条”);
e、 printStackTrace();
}
//底层HTTP连接仍由响应保持
//反对
//允许响应内容直接从
//网络插座。
//以确保系统资源的正确释放
//用户必须完全使用响应内容或中止响应
//请求
//通过调用HttpGet#releaseConnection()执行。
返回数据;
}
私有字符串getStringFromInputStream(InputStream为){
BufferedReader br=null;
StringBuilder sb=新的StringBuilder();
弦线;
试一试{
br=新的BufferedReader(新的InputStreamReader(is));
而((line=br.readLine())!=n
public class VideoSaveSDCARD extends Activity {
private VideoView vView;
private static final String TAG = "UpdaterService";
File SDCardRoot;
Handler asyncHandler = new Handler();
String videoLink = "http://hurriyettv.cubecdn.net/2014/11/19/htv_99710_240p.mp4";
String name = "blaa.mp4";
private Updater updater;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
SDCardRoot = new File(getFilesDir() + "/videos");
File[] videos = SDCardRoot.listFiles();
vView = (VideoView) findViewById(R.id.vview);
try {
String[] fileArray = new String[videos.length];
for (int i = 1; i < 2; i++) {
fileArray[i] = videos[i].getName();
Log.i("@Tag:file[1]", "" + fileArray[i]);
vView.requestFocus();
vView.setVideoPath("" + fileArray[i]);
vView.start();
// MediaPlayer pl = new MediaPlayer();
// pl.setDataSource(fi.getFD());
// pl.prepare();
// pl.start();
//
}
} catch (Exception e) {
// TODO: handle exception
}
/*
* Log.i("fileeee", "" + videos[1]);
*
* vView = (VideoView) findViewById(R.id.vview);
*
* // use this to get touch events vView.requestFocus();
*
* // load video from SD card vView.setVideoPath(
* "/data/data/com.example.downlaodvideo/files/videos/blaa.mp4");
*
* // enable this if you want to enable video controllers, such as pause
* // and forward
*
* // plays the movie vView.start();
*/
File SDCardRoot = new File(VideoSaveSDCARD.this.getFilesDir() + "/"
+ "videos");
if (!SDCardRoot.exists()) {
SDCardRoot.mkdir();
}
// deleteDirectory(SDCardRoot);
updater = new Updater();
updater.start();
}
class Updater extends Thread {
@Override
public void run() {
super.run();
downloadFiles(videoLink, name);
}
}
synchronized boolean downloadFiles(String link, String videoName) {
try {
URL url = new URL(link); // you can write here any link
long startTime = System.currentTimeMillis();
Log.d("VideoManager", "download begining");
Log.d("VideoManager", "download url:" + url);
Log.d("VideoManager", "downloaded file name:" + videoName);
/* 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(new File(SDCardRoot,
videoName));
fos.write(baf.toByteArray());
fos.close();
Log.d("VideoManager",
"download ready in"
+ ((System.currentTimeMillis() - startTime) / 1000)
+ " sec");
return true;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public String getDataFromPortal(String remoteUrl, String myString) {
String data = null;
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(remoteUrl + myString);
try {
HttpResponse response1 = httpclient.execute(httpGet);
InputStream is = response1.getEntity().getContent();
data = getStringFromInputStream(is);
return data;
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
Log.d(TAG, "................internet yok catch 1");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d(TAG, "................internet yok catch 2");
e.printStackTrace();
}
// The underlying HTTP connection is still held by the response
// object
// to allow the response content to be streamed directly from the
// network socket.
// In order to ensure correct deallocation of system resources
// the user MUST either fully consume the response content or abort
// request
// execution by calling HttpGet#releaseConnection().
return data;
}
private String getStringFromInputStream(InputStream is) {
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
String line;
try {
br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return sb.toString();
}
public static boolean deleteDirectory(File path) {
if (path.exists()) {
File[] files = path.listFiles();
if (files == null) {
return true;
}
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
deleteDirectory(files[i]);
} else {
files[i].delete();
}
}
}
return (path.delete());
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("on create","on create");
setContentView(R.layout.activity_main);
new Asyntask().execute();
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
SDCardRoot = new File("/sdcard/videos");
Log.d("SDCARDGGHGHg",""+SDCardRoot);
File[] videos = SDCardRoot.listFiles();
//Log.d("Videos array ",""+videos[0].getName());
vView = (VideoView) findViewById(R.id.vview);
Log.d("before try cathc","testing");
File SDCardRoot = new File("/sdcard/videos");
Log.d("SDCardRoot",""+SDCardRoot);
if (!SDCardRoot.exists()) {
SDCardRoot.mkdir();
}
}
class Asyntask extends AsyncTask<Void,Void,Void>
{
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
Log.d("In background","in background");
URL url;
try {
url = new URL(videoLink);
long startTime = System.currentTimeMillis();
Log.d("VideoManager", "download begining");
Log.d("VideoManager", "download url:" + url);
Log.d("VideoManager", "downloaded file name:" + name);
/* Open a connection to that URL. */
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos;
fos = new FileOutputStream(new File(SDCardRoot,
name));
fos.write(baf.toByteArray());
fos.close();
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (Exception e) {
// TODO: handle exception
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
Log.d("In post","in post");
vView.setVideoPath(SDCardRoot+"/blaa.mp4");
vView.start();
Log.d("android","post execute");
super.onPostExecute(result);
}
}