手把手教你做视频播放器(六)(完)

第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属性,

  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就能满足这样的要求,就会被系统作为推荐打开方式,提供给用户选择。

后记

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

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

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

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

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

时间: 2024-10-24 01:07:51

手把手教你做视频播放器(六)(完)的相关文章

手把手教你做视频播放器(一)

前言 通过"计算器"应用我们已经熟悉了安卓应用开发的大致流程,具备了开发的初步知识. 接下来,我们将开始制作一个"视频播放器"应用,进一步加深对程序开发的学习. 当完成这个"视频播放器"应用后,大家就能够独立开发一类稍微复杂点的安卓应用了. 本文针对的读者是: 对安卓开发有了初步认识,但还没有什么经验的新人: 对已有的安卓开发经验没有系统化整理的开发者: 在开始以前,假设各位已经做好了如下准备: 一台开发用笔记本电脑,并搭建好了开发环境: 一部安

手把手教你做视频播放器(五)

第7节 竖屏的播放界面 播放视频的功能放在一个单独的Activity当中.我们将为它们设置横竖屏两种布局. 在竖屏的时候,上半部分播放视频,下半部分显示视频信息: 在设备旋转成横屏的时候,视频进行全屏播放: 7.1 启动视频播放界面 当点击视频列表的视频项时,就启动播放器播放对应的视频.这里我们要创建一个名字叫做VideoPlayer的Activity,用它来完成视频播放的任务. 另外,还要为ListView添加一个数据项点击时的监听函数, 实现ListView的OnItemClickListe

手把手教你做视频播放器(四)

第5节 刷新与停止刷新列表 虽然经过我们的假设,忽略了很多不需要关注的视频文件,但设备上依然有可能有很多的满足了我们假设条件的视频存在,这时就需要一个"取消刷新"的功能. 如果视频还没有刷新完,就被取消了,然后又希望继续刷新,那么还需要一个手动开始"刷新"的功能. 因此,准备在ActionBar的右上角,设置一个菜单项,让用户可以"刷新",也能"停止刷新". 5.1 添加刷新菜单项 在制作"计算器"的文档里

手把手教你做视频播放器(二)

第2节 获取视频信息 要知道设备上有哪些可以被播放的视频文件,一般来讲有两个方法, 遍历设备磁盘上所有的目录,根据文件的后缀名,把这些目录中所有的视频文件都找出来: 向安卓系统提供的Media Provider提出查询请求,从而获取我们希望的视频文件信息: 从"减小开发难度,利用安卓系统自身功能,选择最简单的方案"的角度出发,我们采用Media Provider. 2.1 ContentProvider ContentProvider是安卓系统的四大组件之一,为别的组件(Activit

手把手教你做视频播放器(三)

第4章 展示视频列表 在应用界面当中,经常需要使用列表来展示内容. Android SDK提供了ListView控件,来实现这种效果. ListView需要和Adapter配合使用,ListView负责内容的显示,Adapter负责为ListView提供要展示的数据. 4.1 ListView的使用方法 使用ListView展示内容,通常分下面几个步骤, 在布局文件中设置ListView布局: <ListView xmlns:android="http://schemas.android.

手把手教你做视频播放器(五)-视频列表的横屏

第6节 视频列表的横屏 设备在横放或者竖放的时候都会自动调整应用的布局,进行对应的横屏显示或者竖屏显示.我们的视频列表也是如此. 我们可以用两种方法处理设备旋转的问题, 让Activity不跟随设备方向的旋转而旋转,它只有竖屏(或只有横屏)的界面.要做到这一点很容易,在AndroidManifest.xml文件中,给这个Activity组件加上android:screenOrientation="portrait" (保持竖屏)或者android:screenOrientation=&

微信测试工程师手把手教你做弱网络模拟测试

微信测试工程师手把手教你做弱网络模拟测试 Posted by 腾讯优测 | 3,152 views 小优有话说: app研发不同于实验室里做研究,哪里有"理想环境". 理想里,用户用着性能卓越的手机,连着畅通无阻的wifi网络. "哇塞!这个app好用到飞起!" 现实是,他们可能正用着你闻所未闻的机型,穿梭于地铁.公交.火车.乡间.大山-.. 信号"若隐若现,扑朔迷离" "我去!又crash了!" "唉,怎么又连不上

UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包

背景 项目上需要做UWP的自动安装包,在以前的公司接触的是TFS来做自动build. 公司要求用Jenkins来做,别笑话我,之前还真不晓得这个东西. 会的同学请看一下支持错误,不会的同学请先自行脑补,我们一步一步的来. 首先我们准备2个安装包,Jenkins,NuGet 都下载最新的好了. 1. 安装Jenkins,下一步下一步.安装好了会自动浏览器跳转到http://localhost:8080/ 如下图 按照提示去C:\Program Files (x86)\Jenkins\secrets

手把手教你做JavaWeb项目:登录模块

现如今,无论是客户端还是移动端,无论是游戏登陆还是社交平台登陆,无处不在的“登陆”.那么你知道怎么制作吗?今天就为你娓娓道来: 用户登录 在各大信息管理系统中,登录功能是必不可少的,他的作用就是验证用户的身份,判断用户是否是本站的会员,只有会员才能访问当前系统 登录的实现步骤: 1.用户填写账号和密码,提交到后台2.后台获取到账号和密码后,将其发送到数据库中进行查询3.查询结果如果为null,说明用户填写的账号或者密码有误,应该回到登录页面并提示用户重新输入4.查询结果如果不为null,说明用户