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);
}
});
网友评论