项目总结
1.Activity 横竖屏切换的生命周期
默认情况:(会导致重新播放)
onPause—>onStop—>onDestroy—>onCreate—>onStart—>onResume
屏幕横竖切换导致生命周期重新执行
解决:
<activity android:name=".activity.SystemVideoPlayer"
android:configChanges="keyboardHidden|screenSize|orientation" />
2.视频的SeekBar更新
视频的总时长和SeekBar的setMax(总时长)
实例化Handler,每秒得到当前视频播放的进度,SeekBar,setProgress(当前进度);
3.SeekBar的拖拽
视频的总时长和SeekBar的setMax(总时长)
设置SeekBar状态变化的监听
4.注册广播有俩种方式:动态注册和静态注册
静态注册:在功能清淡文件注册,只要软件安装在手机上,就算软件不启动,也能收到对应的广播;
…___________…
但是有局限:比如电量,锁屏开屏等监听就不能再静态中注册
(频繁变化的,底层系统不允许)
动态注册:只有注册的代码被执行后,才能收到对应的广播
5.释放资源时
@Override
protected void onDestroy() {
//取消广播
if (receiver!=null){
unregisterReceiver( receiver );
receiver=null;
}
super.onDestroy();
}
要在super()之前
因为要先释放子类,后释放父类
6.swich 和 if
swich可以的if都可以,反之不可以
因为if可以取范围
7.传递列表数据到Activity中,列表中的数据有可能是对象,或者是String,int;如果要传列表数据是对象 需要 序列化
报错提示:Parcel: unable to marshal…
自定义的对象可以通过bundle传递,前提条件就是自定义的类实现Parcelable,Serializable俩个接口之一
在Activity之间传递对象有俩个选择
Parcelable和Serializable的选择
Parcelable是android自带的,Serializable兼容性更好,也更简便
1.在使用内存的时候,Parcelable类比Serializable性能高,所以推荐使用Parcelable类
Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC
Parcelable不能使用在要将数据存储在磁盘上的情况
对象为什么要序列化
1.永久性保存对象,保存对象的字节序列到本地文件
2.通过序列化对象在网络中传递对象
3.通过序列化对象在进程中传递对象
8.手势识别器
1.定义:private GestureDetector detector;
2.实例化(重写方法:双击,单击,长按)
3.onTouchEvent():方法中把事件传递给手势识别器(重要)
解决BUG:拖动进度条,音量条的时候,超过4秒,控制面板隐藏
9.调节音量
1.实例化AudioManger :当前音量,最大音量
2.SeekBar.setMax(最大音量)
SeeKBar.setProGress(当前的音量)
3.设置SeekBar状态变化,
10.在屏幕滑动改变声音
从上往下
float distanceY=startY-endY<0
start+负数:音量变小
…
从上往下
float distanceY=startY-endY>0
start+正数:音量变大
滑动屏幕的总距离:总距离=改变声音:音量最大值(比值)
改变声音=(滑动屏幕的距离:总距离)*音量最大值
最终声音=原来的+改变声音
实现
1.onTouchEvent方法里,在down的时候:startY touchRang:总距离
移除消息
mVol
2.在move
float endy=envent.getY();
float distanceY=endY-startY;
updataVoice();
3.在up的时候重新发消息
11.让其它软件调用自己写的播放器
方法:参照系统源代码
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="rtsp" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="video/*" />
<data android:mimeType="application/sdp" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:mimeType="video/mp4" />
<data android:mimeType="video/3gp" />
<data android:mimeType="video/3gpp" />
<data android:mimeType="video/3gpp2" />
</intent-filter>
12.点击调起所有播放器
Intent intent=new Intent( );
//重要!不加这个不行
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType( Uri.parse("http://192.168.137.1:8080/zjq.mp4"),"video/*");
startActivity( intent );
13.手机连接电脑播放的tomcat的配置
1.用手机连上pc的wifi
2.开启电脑tomcat,并且把一个视频放入
3.查看ip地址(cmd-ipconfig),找Ipv4