手把手教你做视频播放器(七)-横屏的播放界面与开放视频播放功能(完)

第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);
}

/*******************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。
/*******************************************************************/

第9节 开放视频播放功能

安卓系统的开发性不只是源码的开放,各个应用之间也是可以互相利用的。比如,我们在图片浏览器里面浏览照片,发现好的,可以通过分享按钮,通过另外一个应用-“微信”,把照片分享到“朋友圈”。这里的“微信”,就是可以被别的应用利用的工具。

类似的,我们也可以把这个视频播放器,做成这种可以被别的程序使用的工具。例如当用户使用文件浏览器浏览磁盘上的文件时,发现一个视频文件,点击后,系统可以提示用户用我们的播放器来播放。

要实现这样的修改非常的容易,只需要修改AndroidManifest.xml中注册的播放器Activity属性,

  1. VideoPlayer的过滤器添加action标签,值设置为android.intent.action.View
  2. 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就能满足这样的要求,就会被系统作为推荐打开方式,提供给用户选择。


/*******************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。
/*******************************************************************/

后记

一个简单但是功能比较完备的视频播放器已经开发完成了。

最后,可以在菜单栏中增加一个“关于”功能,通过它启动一个介绍这个应用的说明Activity。我们在这里就简单的展示下开发者信息和应用版本信息。

通过这一章节的学习,我们对安卓系统又有了进一步的认识,应该具备了开发一个简单安卓应用的能力。

安卓开发之路一步一步走到现在,我们开始渐入佳境。有了这前面两个篇章的铺垫,相信大家已经算是对安卓开发入门了。

对于本章开篇中提到的那些“遗憾”之处,也许就是我们下一个篇章深入开发的起点。


/*******************************************************************/
* 版权声明
* 本教程只在CSDN安豆网发布,其他网站出现本教程均属侵权。
/*******************************************************************/

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值