Android 搜索手机本地的全部视频(通过查询数据库)

开始的时候我是通过根路径去遍历,发现行不通。不知道是手机的问题还是逻辑问题(个人觉得没毛病),最后我就是用了查询手机的数据库来找出所有的本地视频。

话不多少说。

下面的类,是主界面的一个内部类。因为要查询数据库(一个耗时操作)所以要在子线程里面进行,通过handle更改UI界面(跳转到主线程)。

MediaStore这个类是Android系统提供的一个多媒体数据库android中多媒体信息都可以从这里提取(视频和图像和音频基本类似)。

ContentResolver 用法参数详情到了解http://blog.csdn.net/jdsjlzx/article/details/9080235

 /**
     * 遍历系统数据库找出相应的是视频的信息
     */
    class Search_photo extends Thread {
        @Override
        public void run() {
            // 如果有sd卡(外部存储卡)
            if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
                Uri originalUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                ContentResolver cr = LocalVideoActivity1.this.getApplicationContext().getContentResolver();
                Cursor cursor = cr.query(originalUri, null, null, null, null);
                if (cursor == null) {
                    return;
                }
                for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
                    String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
                    String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
                    long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));
                    long duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
                    //获取当前Video对应的Id,然后根据该ID获取其缩略图的uri
                    int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
                    String[] selectionArgs = new String[]{id + ""};
                    String[] thumbColumns = new String[]{MediaStore.Video.Thumbnails.DATA,
                            MediaStore.Video.Thumbnails.VIDEO_ID};
                    String selection = MediaStore.Video.Thumbnails.VIDEO_ID + "=?";

                    String uri_thumb = "";
                    Cursor thumbCursor = (LocalVideoActivity1.this.getApplicationContext().getContentResolver()).query(
                            MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, thumbColumns, selection, selectionArgs,
                            null);

                    if (thumbCursor != null && thumbCursor.moveToFirst()) {
                        uri_thumb = thumbCursor
                                .getString(thumbCursor.getColumnIndexOrThrow(MediaStore.Video.Thumbnails.DATA));

                    }

                    BitmapEntity bitmapEntity = new BitmapEntity(title, path, size, uri_thumb, duration);

                    bit.add(bitmapEntity);

                }
                if (cursor != null) {
                    cursor.close();
                    mHandler.sendEmptyMessage(1);
                }
            }
        }
    }
查到了信息保存后,通过handle进行自己想要的界面显示(这些都是我自己的显示,可以自己修改)

 @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @SuppressLint("ShowToast")
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 1 && bit != null) {
                adapter = new VideodetailListviewAdapter(LocalVideoActivity1.this, bit);
                Toast.makeText(LocalVideoActivity1.this, "视频总数:" + bit.size(), Toast.LENGTH_SHORT).show();
                mListView.setAdapter(adapter);
                mListView.setOnItemClickListener(new OnItemClickListener() {
		//单单点击一次后执行
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                        if (bit.size() != 0) {
                            Intent intent = new Intent(Intent.ACTION_VIEW);
                            String type = "video/mp4";
                            Uri uri = Uri.parse("file://" + bit.get(arg2).getUri());
                            intent.setDataAndType(uri, type);
                            startActivity(intent);
                        }
                    }
                });
		//长按后执行
                mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                    @Override
                    public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
                        ppDismiss();//弹出框消失的方法
		    //自定义弹出框
View ppView = View.inflate(LocalVideoActivity1.this, R.layout.view_pp, null); //newpp对象 pp = new PopupWindow(ppView, -2, -2); pp.setFocusable(true); //ppwindow的bug就是无论做什么都给他设置一个背景,不然无法起作用 pp.setBackgroundDrawable(new ColorDrawable()); int[] location = new int[2]; view.getLocationInWindow(location); pp.showAtLocation(view, Gravity.LEFT + Gravity.TOP, 260, location[1]); //ppwindow的动画 //缩放 ScaleAnimation sa = new ScaleAnimation(0.2f, 1.0f, 0.2f, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.5f); sa.setDuration(500); //渐变 AlphaAnimation aa = new AlphaAnimation(0.2f, 1.0f); aa.setDuration(500); //动画集 AnimationSet set = new AnimationSet(false); set.addAnimation(sa); set.addAnimation(aa); //开启动画,谁开启就作用在谁的身上 ppView.startAnimation(set); /*LinearLayout ll_start = (LinearLayout) ppView.findViewById(R.id.ll_start); ll_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Toast.makeText(LocalVideoActivity.this, "123456", Toast.LENGTH_SHORT).show(); // System.out.println("播放"); String path = Environment.getExternalStorageDirectory().toString() + "/Movies/"; //设置视频控制器// videoView.setMediaController(new MediaController(LocalVideoActivity.this));// videoView.setVideoPath(path + name.get(position));// videoView.start(); } });*/ //获取视频信息上传到服务器跳转(可以不看) LinearLayout ll_share = (LinearLayout) ppView.findViewById(R.id.ll_share); ll_share.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Toast.makeText(LocalVideoActivity.this, "上传", Toast.LENGTH_SHORT).show(); // Toast.makeText(LocalVideoActivity.this, s, Toast.LENGTH_SHORT).show(); // Uri uri = Uri.parse("file://" + bit.get(position).getUri()); // 得到sd卡内image文件夹的路径 File.separator(/) //String path = Environment.getExternalStorageDirectory().toString()+ "/Movies"; String path=new String(""+ bit.get(position).getUri()); //File file = new File(ss); // String path=file.getPath(); ppDismiss(); Intent intent = new Intent(LocalVideoActivity1.this, UploadActivity.class); intent.putExtra("videoname", path); startActivity(intent); } }); return true; } }); } } };






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值