android中怎么播放本地视频播放器,安卓之播放本地视频讲解

时间:2025-02-28 07:28:13

第一种形式:(网络的URL)

Intent it = new Intent();

(Intent.ACTION_VIEW);

((""));

startActivity(it);

第二种形式:(本地URL)

Intent intent = new Intent(Intent.ACTION_VIEW);

Uri uri = ("file:///sdcard/foo.mp3");

(uri, "audio/mp3");

startActivity(intent);

可是有时候我们加载本地URL的形式却是这样子的:/storage/emulated/0/video/test.MP4

如果还是用()可能在一些手机调用不到系统的播放器(播放不了),解决办法如下:

把()改为(new File(URL));

有一种需求是获取本地视频的缩略图,网上有很多办法获取,在这里我只介绍一种,本人觉得是最有用,最有效的:(异步,缓存加载)

这里有个工具类:

/**

* Created by CWJ on 2016/4/15.

*/

public class VideoThumbnailLoader {

private static VideoThumbnailLoader mInstance;

private Map> caches;

private List mTaskQueue;

public static VideoThumbnailLoader getInstance(){

if (mInstance == null){

mInstance = new VideoThumbnailLoader();

}

return mInstance;

}

private VideoThumbnailLoader(){

caches = new HashMap<>();

mTaskQueue = new ArrayList<>();

isRunning = true;

runnable = new LoadRunnable();

new Thread(runnable).start();

}

public void displayThumbnail(ImageView imageView, String videoPath, int resId) {

(videoPath);

Bitmap bitmap = loadImage(videoPath, getImageCallback(imageView, resId));

if (bitmap == null){

(resId);

}else {

(bitmap);

}

}

private Bitmap loadImage(String videoPath, ImageCallback callback) {

if (caches .containsKey(videoPath)){

SoftReference softReference = (videoPath);

Bitmap bitmap = ();

if (bitmap == null){

(videoPath);

}else {

return bitmap;

}

}else {

LoadTask task = new LoadTask();

= videoPath;

= callback;

if (!(task)){

(task);

synchronized (runnable) {

();

}

}

}

return null;

}

//回调接口

public interface ImageCallback{

void loadImage(String path, Bitmap bitmap);

}

class LoadTask{

String path;

Bitmap bitmap;

ImageCallback callback;

@Override

public boolean equals(Object o) {

LoadTask task = (LoadTask)o;

return (path);

}

}

private LoadRunnable runnable;

private boolean isRunning = false;

class LoadRunnable implements Runnable {

@Override

public void run() {

while (isRunning){

while (() > 0){

LoadTask task = (0);

= CustomUtil.getVideoThumbnail1();

(, new SoftReference());

if(handler != null){

Message msg = ();

= task;

(msg);

}

}

synchronized (this) {

try {

();

} catch (InterruptedException e) {

();

}

}

}

}

}

private ImageCallback getImageCallback(final ImageView imageView, final int resId){

return new ImageCallback() {

@Override

public void loadImage(String path, Bitmap bitmap) {

if((().toString())){

(bitmap);

}else{

(resId);

}

}

};

}

private Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

LoadTask task = (LoadTask);

(, );

}

};

}

然后在listview或者recycleview加载item:

().displayThumbnail(holder.iv_photo, sdState + (position - 1), .loading_img);

第一个参数的加载的view(ImageView),第二个是文件的路径(URL),第三个是默认加载的图片,也就是当没有获取到视频缩略图时默认显示的图片。