第8节 横屏的播放界面
在设备旋转成横屏的时候,视频将自动进行全屏播放。
8.1 播放器横屏布局
我们要为全屏播放界面设置一个新的布局,这个布局里面只用来播放视频,不需要显示任何视频信息,
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/video_background_color">
<VideoView
android:layout_gravity="center"
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
8.2 全屏的设置
因为横竖屏的VideoPlayer
都是一套代码实现的,所以需要判断当前Activity是横屏还是竖屏,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
if (this.getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
//界面横屏时需要进行的操作
}
......
}
在VideoPlayer
创建的时候,我们要对这个Activity进行全屏的设置,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
if (this.getResources().getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
}
......
}
因为要使应用全屏,所以需要修改Activity所属的窗口-Window的属性。以此告诉系统需要隐藏状态栏和导航栏。
还需要隐藏ActionBar
。
8.3 横竖屏转换的状态保存
在旋转的过程中,Activity将经历这些的生命周期:
用户可以与Activity交互,此时屏幕进行旋转,从竖屏变横屏->
onSaveInstanceState()
->
onPause()
->
onStop()
->
onDestroy()
->
onCreate()
->
onStart()
->
onRestoreInstanceState()
->
onResume()
->
用户可以与Activity交互;
可见,这个Activity要被重新创建一次,所以当视频正在播放的时候,我们要保存好视频当前播放的位置,Activity重建以后才能从之前播放到的位置继续播放。
我们要在onSaveInstanceState()
里面保存当前播放的位置,
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(LAST_PLAYED_TIME, mVideoView.getCurrentPosition());
}
在onRestoreInstanceState()
里面取出打断播放时的位置,并存储到mLastPlayedTime
里面,当Activity在onResume()
的时候,就能够跳转到播放点开始播放了。
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mLastPlayedTime = savedInstanceState.getInt(LAST_PLAYED_TIME);
}
第9节 开放视频播放功能
安卓系统的开发性不只是源码的开放,各个应用之间也是可以互相利用的。比如,我们在图片浏览器里面浏览照片,发现好的,可以通过分享按钮,通过另外一个应用-“微信”,把照片分享到“朋友圈”。这里的“微信”,就是可以被别的应用利用的工具。
类似的,我们也可以把这个视频播放器,做成这种可以被别的程序使用的工具。例如当用户使用文件浏览器浏览磁盘上的文件时,发现一个视频文件,点击后,系统可以提示用户用我们的播放器来播放。
要实现这样的修改非常的容易,只需要修改AndroidManifest.xml
中注册的播放器Activity属性,
- 为
VideoPlayer
的过滤器添加action
标签,值设置为android.intent.action.View
; - 为
VideoPlayer
的过滤器添加data
标签,让VideoPlayer
关注video
类型的数据;
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anddle.anddleplayer">
......
<application
......
android:theme="@style/AppTheme">
......
<activity android:name=".VideoPlayer">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data
android:mimeType="video/*"
android:scheme="file" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
......
</application>
</manifest>
这样,如果别的任何应用使用android.intent.action.View
来试图打开一个视频文件,我们的VideoPlayer
就能满足这样的要求,就会被系统作为推荐打开方式,提供给用户选择。
后记
一个简单但是功能比较完备的视频播放器已经开发完成了。
最后,可以在菜单栏中增加一个“关于”功能,通过它启动一个介绍这个应用的说明Activity。我们在这里就简单的展示下开发者信息和应用版本信息。
通过这一章节的学习,我们对安卓系统又有了进一步的认识,应该具备了开发一个简单安卓应用的能力。
安卓开发之路一步一步走到现在,我们开始渐入佳境。有了这前面两个篇章的铺垫,相信大家已经算是对安卓开发入门了。
对于本章开篇中提到的那些“遗憾”之处,也许就是我们下一个篇章深入开发的起点。