安卓之播放本地視頻講解

第一種形式:(網(wǎng)絡(luò)的URL)

Intent it = new Intent();
it.setAction(Intent.ACTION_VIEW);
it.setData(Uri.parse("http://www.baidu.com"));
startActivity(it);

第二種形式:(本地URL)

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);

可是有時候我們加載本地URL的形式卻是這樣子的:/storage/emulated/0/video/test.MP4
如果還是用Uri.parse()可能在一些手機調(diào)用不到系統(tǒng)的播放器(播放不了)漆羔,解決辦法如下:
Uri.parse()改為Uri.fromFile(new File(URL));

有一種需求是獲取本地視頻的縮略圖私蕾,網(wǎng)上有很多辦法獲取,在這里我只介紹一種歧焦,本人覺得是最有用,最有效的:(異步劳吠,緩存加載)
這里有個工具類:

/**
 * Created by CWJ on 2016/4/15.
 */
public class VideoThumbnailLoader {
    private static VideoThumbnailLoader mInstance;
    private Map<String, SoftReference<Bitmap>> caches;

    private List<LoadTask> 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) {
        imageView.setTag(videoPath);
        Bitmap bitmap = loadImage(videoPath, getImageCallback(imageView, resId));

        if (bitmap == null){
            imageView.setImageResource(resId);
        }else {
            imageView.setImageBitmap(bitmap);
        }
    }

    private Bitmap loadImage(String videoPath, ImageCallback callback) {
        if (caches .containsKey(videoPath)){
            SoftReference<Bitmap> softReference = caches.get(videoPath);
            Bitmap bitmap = softReference.get();
            if (bitmap == null){
                caches.remove(videoPath);
            }else {
                return bitmap;
            }
        }else {
            LoadTask task = new LoadTask();
            task.path = videoPath;
            task.callback = callback;
            if (!mTaskQueue.contains(task)){
                mTaskQueue.add(task);
                synchronized (runnable) {
                    runnable.notify();
                }
            }
        }
        return null;
    }

    //回調(diào)接口
    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 task.path.equals(path);
        }
    }

    private LoadRunnable runnable;
    private boolean isRunning = false;
    class LoadRunnable implements Runnable {
        @Override
        public void run() {
            while (isRunning){
                while (mTaskQueue.size() > 0){
                    LoadTask task = mTaskQueue.remove(0);
                    task.bitmap = CustomUtil.getVideoThumbnail1(task.path);
                    caches.put(task.path, new SoftReference<Bitmap>(task.bitmap));
                    if(handler != null){
                        Message msg = handler.obtainMessage();
                        msg.obj = task;
                        handler.sendMessage(msg);
                    }
                }

                synchronized (this) {
                    try {
                        this.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    private ImageCallback getImageCallback(final ImageView imageView, final int resId){
        return new ImageCallback() {
            @Override
            public void loadImage(String path, Bitmap bitmap) {
                if(path.equals(imageView.getTag().toString())){
                    imageView.setImageBitmap(bitmap);
                }else{
                    imageView.setImageResource(resId);
                }
            }
        };
    }

    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            LoadTask task = (LoadTask)msg.obj;
            task.callback.loadImage(task.path, task.bitmap);
        }

    };
}

然后在listview或者recycleview加載item:

VideoThumbnailLoader.getInstance().displayThumbnail(holder.iv_photo, sdState + array.get(position - 1), R.drawable.loading_img);

第一個參數(shù)的加載的view(ImageView)恃鞋,第二個是文件的路徑(URL),第三個是默認加載的圖片痛单,也就是當沒有獲取到視頻縮略圖時默認顯示的圖片。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劲腿,一起剝皮案震驚了整個濱河市旭绒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖挥吵,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件重父,死亡現(xiàn)場離奇詭異,居然都是意外死亡忽匈,警方通過查閱死者的電腦和手機房午,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丹允,“玉大人郭厌,你說我怎么就攤上這事〉癖危” “怎么了折柠?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長批狐。 經(jīng)常有香客問我液走,道長,這世上最難降的妖魔是什么贾陷? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮嘱根,結(jié)果婚禮上髓废,老公的妹妹穿的比我還像新娘。我一直安慰自己该抒,他們只是感情好慌洪,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凑保,像睡著了一般冈爹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上欧引,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天频伤,我揣著相機與錄音,去河邊找鬼芝此。 笑死憋肖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的婚苹。 我是一名探鬼主播岸更,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膊升!你這毒婦竟也來了怎炊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎评肆,沒想到半個月后债查,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡糟港,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年攀操,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秸抚。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡速和,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剥汤,到底是詐尸還是另有隱情颠放,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布吭敢,位于F島的核電站碰凶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鹿驼。R本人自食惡果不足惜欲低,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畜晰。 院中可真熱鬧砾莱,春花似錦、人聲如沸凄鼻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽块蚌。三九已至闰非,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峭范,已是汗流浹背财松。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纱控,地道東北人游岳。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像其徙,于是被迫代替她去往敵國和親胚迫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容