import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
//定义对象
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定控件
button=findViewById(R.id.button);
//点击跳转事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,VideoActivity.class);
startActivity(intent);
}
});
}
}
package com.example.myvideoplayer;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class VideoActivity extends AppCompatActivity {
//定义对象
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
initView();//控件初始化
initData();//数据初始化
}
private void initView() {
recyclerView=findViewById(R.id.recyclerview);
}
private void initData() {
//准备视频数据
List
package com.example.myvideoplayer;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class VideoAdapter extends
RecyclerView.Adapter {
private List
package com.example.myvideoplayer;
public class Video {
private String videoName;
private String videoUrl;
public String getVideoName() {
return videoName;
}
public String getVideoUrl() {
return videoUrl;
}
public Video(String videoName, String videoUrl) {
this.videoName = videoName;
this.videoUrl = videoUrl;
}
}
提醒:
(1)添加依赖,由于 RecyclerView 是 android 5.0 新增的控件,所以需要在 build.gradle 里面添加依赖:如下
implementation'com.android.support:recyclerview-v7:28.0.0'
(2)因为要读写 sd 卡上的歌曲,所以需要在配置文件中添加权限,如下
(3)在配置文件中,开通网络权限
(4)右击 res 文件夹,new---Directory,文件名:raw(文件名不能自定义),让一个视频文件粘贴到该文件夹下。
(5)选择视频,将该视频存储到模拟器 sdcard 文件夹中的 Movies 文件夹里。(本案例实用的方法二)
模拟器中的Url应该怎么书写???
方法一:String path1 = Environment.getExternalStorageDirectory().getPath() + “/文件所在子目录/视频文件名.MP4";
方法二:String path2 = “file:///路径/视频文件名.MP4";
(6)这里的view.getContext()返回的是Activity,表示上下文环境
package com.example.myvideoplayer;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;
public class PlayActivity extends AppCompatActivity {
//定义对象
private TextView my_videoname;
private VideoView my_videoview; //视频播放器
private MediaController mediaController;//定义媒体控制柄
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play);
initView();//控件初始化
initData();//数据初始化
}
private void initView() {
my_videoname=findViewById(R.id.my_videoname);
my_videoview=findViewById(R.id.my_videoview);
mediaController=new MediaController(this);
}
private void initData() {
//1、获取从音乐列表传过来的视频名称和视频地址
String myvideoname=getIntent().getStringExtra("videoname");
String myvideourl=getIntent().getStringExtra("videourl");
//2、将视频名称显示在文本框中,将视频地址关联到播放器中
my_videoname.setText(myvideoname);
my_videoview.setVideoPath(myvideourl);
//视频播放器和媒体控制柄关联起来
my_videoview.setMediaController(mediaController);
//媒体控制柄和视频播放器关联起来
mediaController.setMediaPlayer(my_videoview);
//3、启动视频播放器播放视频
my_videoview.start();
}
}
(1)VideoView详解
在Android的界面控件中有一个视频播放控件VideoView,可以直接在手机上 面开辟一个视频播放的UI,播放视频。程序中利用控件进行播放比较简单,几 个重要的方法如下:
// 指定需要播放的视频的地址videoView.setVideoURI(Uri.parse("android.resource://poet.android.factory/"+R.raw.demo));
//设置视频路径 videoView.setVideoPath();
// 设置播放器的控制条 videoView.setMediaController(new MediaController(this));
// 开始播放视频 videoView.start();
(2)媒体控制柄MediaController详解
VideoView控制视频播放的功能相对较少,具体而言,它只有start和pause方 法。为了提供更多的控制,可以实例化一个MediaController,并通过 setMediaController方法设置其为VideoView的控制器。
默认的MediaController有后退(rewind)、暂停(pause)、播放(play)和快进 (fast-forward)按钮,还有一个清除和进度条组合控件,可以用来定位到视频中的任何一个位置。
到目前为止,程序的功能都已经完成了;
假如我们有200个视频需要存储,显然存储到raw文件夹下和模拟器中都是不可取的。
接下来是补充内容!!!
注意: 在百度中输入“比目后端云”,进入主页。注册账号,登录 创建应用。名称任意。比如我的应用名称为:MyOne 类型其他,创建应用。
接下来,通过 5 个步骤让程序有服务器关联起来。
第一步:在 Project 的 build.gradle 文件中添加 Bmob 的 maven 仓库地址:如下:
allprojects {
repositories {
google()
jcenter()
//第一步:在 Project 的 build.gradle 文件中添加 Bmob 的 maven 仓库地址:
//Bmob 的 maven 仓库地址--必填
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
}
}
第二步: 在 app 的 build.gradle 文件中添加 compile 依赖文件:
android {
„„„„„„„„„„
//第二步: 在 app 的 build.gradle 文件中添加 compile 依赖文件:
useLibrary 'org.apache.http.legacy'
}
dependencies {
„„„„„„„„
//第二步: 在 app 的 build.gradle 文件中添加 compile 依赖文件:
implementation 'cn.bmob.android:bmob-sdk:3.7.0'
implementation "io.reactivex.rxjava2:rxjava:2.2.2"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'com.squareup.okio:okio:2.1.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
}
第五:在你想用 bmob 云的页面,初始化比目云//第五步:默认初始化参 2:app ID
public class VideoActivity extends AppCompatActivity {
private static final String TAG = "VideoActivity";
private RecyclerView recy_videoview;
private List videoarrlist;
private VideoAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
initView();//控件初始化
initData();//数据初始化
initBmobData();//比目云数据初始化
}
„„„„„„„„
private void initBmobData() {
//第五步:默认初始化
Bmob.initialize(this, "7c7717065cecdc8037c9d5180ac6bcea");
„„„„„„„„
}
在比目云服务器上,创建一个表,表明 video_table,添加列数据,第一列:video_name; 第二列:video_url; 接下来添加行:单击视频地址下方,选择文件,上传一个视频,单击名字下方,输入视频的名字。
注意:工程中,创建类 video_table 类名要与比目云上的表名一模一样。变量名要与表中的 字段名一模一样。
package com.example.videoplayer;
import cn.bmob.v3.BmobObject;
import cn.bmob.v3.datatype.BmobFile;
public class video_table extends BmobObject {
private String video_name;
private BmobFile video_url;
public String getVideo_name() {
return video_name;
}
public BmobFile getVideo_url() {
return video_url;
}
}
package com.example.videoplayer;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import cn.bmob.v3.Bmob;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.datatype.BmobFile;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.FindListener;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class VideoActivity extends AppCompatActivity {
//定义对象
RecyclerView recyclerView;
List videolist;
VideoAdapter adapter;
private static final String TAG = "VideoActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
initview(); //控件初始化
initData();//数据初始化
initBmobData();//比目云数据初始化
}
private void initview() {
recyclerView=findViewById(R.id.recyclerview);
}
private void initData() {
videolist= new ArrayList<>();
//获取网络视频
Video firstvideo = new Video("玩具总动员", "http://vfx.mtime.cn/Video/2019/03/21/mp4/190321153853126488.mp4");
videolist.add(firstvideo);
Video secondvideo = new Video("紧急救援", "http://vfx.mtime.cn/Video/2019/03/19/mp4/190319222227698228.mp4");
videolist.add(secondvideo);
//获取本地视频
Video thirdvideo=new Video("see you again","android.resource://"+getPackageName()+"/"+R.raw.seeyouagain);
videolist.add(thirdvideo);
Video fourthvideo=new Video("why live","android.resource://"+getPackageName()+"/"+R.raw.whylive);
videolist.add(fourthvideo);
//获取模拟器中的视频
Video fifthvideo=new Video("天生我才必有用", "file:///storage/emulated/0/Pictures/天生我材必有用.mp4");
videolist.add(fifthvideo);
Video sixthvideo=new Video("罗密欧与朱丽叶", "file:///storage/emulated/0/Pictures/罗密欧与朱丽叶.mp4");
videolist.add(sixthvideo);
//让数据显示到 recyclerview 控件上
adapter=new VideoAdapter(videolist);
StaggeredGridLayoutManager layoutManager=new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
}
private void initBmobData() {
//第 5 步:默认初始化
Bmob.initialize(this, "fe59338cc50a44d1468bf8642a7e275b");
//把视频文件存储在比目云
BmobQuery myquery=new BmobQuery();
myquery.findObjects(new FindListener() {
@Override
public void done(List list, BmobException e) {
if(e==null){
for (video_table video_table1 : list) {
//Log.d(TAG, "视频名称: "+video_table1.getVideo_name()+video_table1.getVideo_url());
Video seventhvideo=new Video(video_table1.getVideo_name(),video_table1.getVideo_url().getUrl());
videolist.add(seventhvideo);
}
adapter.notifyDataSetChanged();
}else{
Toast.makeText(VideoActivity.this,"查询失败 ",Toast.LENGTH_SHORT).show();
}
}
});
}
}
简易视频播放器