美文网首页
视频播放器(一) 列表展示

视频播放器(一) 列表展示

作者: 大旺旺的弟弟小旺旺 | 来源:发表于2021-06-17 06:57 被阅读0次

android的视频播放器,android自带的播放器是videoView,它可以实现视频简单的播放功能,本案例实现

  • 查询本地视频,以及列表展示
  • 快进播放
  • 手指滑动控制声音
  • 双击暂停/播放
  • 进度条拖动指定位置
  • 上一个下一个视频

第一个查询本地视频

1.查询本地视频,首先添加权限。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

2.代码里面加一个动态申请

//我们请求,请求之后,我们再次检查是否拥有了此权限,如果拥有了就执行查询操作。
  PermissionUtils.requestPermissions(this, new String[] {
                Manifest.permission.READ_EXTERNAL_STORAGE,
        }, 0);
if (PermissionUtils.permissionsChecking(this, new String[] {Manifest.permission.READ_EXTERNAL_STORAGE})){}

requestPermissions

、、请求
public static void requestPermissions(@NonNull FragmentActivity activity, @NonNull String[] permissions, int request_code) {
boolean hasPermissions = permissionsChecking(activity, permissions);
if (!hasPermissions) {
//请求
     ActivityCompat.requestPermissions(activity, permissions,request_code);
   }
}

请求之前判断是不是拥有

    public static boolean permissionsChecking(@NonNull Context context, @NonNull String[] permissions) {
        int targetVersion = 1;
        try {
            final PackageInfo info = context.getPackageManager()
                    .getPackageInfo(context.getPackageName(), 0);
            targetVersion = info.applicationInfo.targetSdkVersion;
        } catch (PackageManager.NameNotFoundException e) {

        }

        boolean result = true;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                && targetVersion >= Build.VERSION_CODES.M) {
            for (int i = 0; i < permissions.length; i++) {
                result = (ContextCompat.checkSelfPermission(context, permissions[i])
                        == PackageManager.PERMISSION_GRANTED);
                if (!result) {
                    break;
                }
            }
        } else {
            for (int i = 0; i < permissions.length; i++) {
                result = (PermissionChecker.checkSelfPermission(context, permissions[i])
                        == PermissionChecker.PERMISSION_GRANTED);
                if (!result) {
                    break;
                }
            }
        }
        return result;
    }

3.查询数据

ContentResolver contentResolver = getActivity().getContentResolver();
        query = contentResolver.query(
                MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                new String[]{
                        MediaStore.Video.Media._ID, //id
                        MediaStore.Video.Media.DATA, //数据
                        MediaStore.Video.Media.DURATION, //时长
                        MediaStore.Video.Media.SIZE, //大小
                        MediaStore.Video.Media.TITLE}, //名称
                null,
                null,
                null);   

查询出的结果是:Cursor
4.使用listView进行展示

<?xml version="1.0" encoding="utf-8"?>
<ListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/lv"
    android:divider="@color/black"
    android:dividerHeight="1dp"
    android:cacheColorHint="@color/purple_200">
</ListView>

我们查询出来的是cursor,那么就使用cursor适配器继续展示
CursorAdapter.
5.自定义条目布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="50dp">
    <ImageView
        android:id="@+id/iv"
        android:src="@drawable/video_default_icon"
        android:layout_width="70dp"
        android:layout_marginRight="10dp"
        android:layout_height="70dp">

    </ImageView>
    <TextView
        android:id="@+id/tv_tile"
        android:textSize="16sp"
        android:text="标题"
        android:layout_toRightOf="@id/iv"
        android:layout_width="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_height="wrap_content">

    </TextView>
    <TextView
        android:id="@+id/tv_time"
        android:textSize="16sp"
        android:text="标题"
        android:layout_below="@id/tv_tile"
        android:layout_toRightOf="@id/iv"
        android:layout_width="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_height="wrap_content">

    </TextView>
    <TextView
        android:id="@+id/tv_size"
        android:textSize="16sp"
        android:text="标题"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_marginTop="5dp"
        android:layout_centerVertical="true"
        android:layout_height="wrap_content">

    </TextView>
</RelativeLayout>

6.书写适配器

public class VideoListAdapter extends CursorAdapter {
    private View mView;
    public VideoListAdapter(Context context, Cursor c) {
        super(context, c);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        mView = View.inflate(context, R.layout.adapter_video_item,null);
        mView.setTag(new VideoHolder());
        return mView;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        VideoHolder holder =(VideoHolder) view.getTag();
        VideoBean bean = VideoBean.getInstance(cursor);
        holder.tvTitle.setText(bean.getTitle());
        holder.tvSize.setText(StringUtils.formatSize(bean.getSize()));
        holder.tvTime.setText(StringUtils.formatTime(bean.getTime()));
    }

    class VideoHolder{
        private TextView tvTitle;
        private TextView tvTime;
        private TextView tvSize;
        public VideoHolder(){
            tvTitle = mView.findViewById(R.id.tv_tile);
            tvTime = mView.findViewById(R.id.tv_time);
            tvSize = mView.findViewById(R.id.tv_size);
        }
    }
}

这个基本就是固定套路,基本这么写就可以了。
7.下来给每个条目上加上点击事件,进入不同的视频进行播放。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(getActivity(), VideoPlayActivity.class);
//                Intent intent = new Intent(getActivity(), AndoridVideoViewActivity.class);
                ArrayList<VideoBean> videoBean = VideoBean.getVideoBean(query);
                intent.putExtra("bean",videoBean);//接收端需要变化
                intent.putExtra("position",position);
                startActivity(intent);
            }
        });

相关文章

网友评论

      本文标题:视频播放器(一) 列表展示

      本文链接:https://www.haomeiwen.com/subject/ccgfyltx.html