音频和视频的播放
Android提供了简单的API来播放音频视频,支持的音频格式有MP3,WAV,3GP等,支持的视频格式有MP4,3GP等
安卓9增强的MediaPlayer
略
音乐特效控制
使用AudioEffect及其子类
略
SoundPool播放音效
主要用于播放一些短的声音片段。使用音效池的概念来管理多个短促的音效。与MediaPlayer相比,SoundPool的优势在于CPU资源占用量低,反映延迟小。SoundPool支持自行设置声音的品质,音量,播放比率等参数。
Builder内部类专门用于创建SoundPool。
略
VideoView播放视频
使用VideoView播放视频的步骤
1.在界面布局文件中定义VideoView组建,或在程序中创建VideoView组建
2.调用VideoView的如下两个方法来加载指定视频
- setVideopath(String path):加载path文件所代表的视频
- setVideoURI(Uri uri):加载uri所对应的视频
3.调用VideoView的start(),stop(),pause()方法来控制视频播放
部分代码:
xml
<!-- 定义VideoView播放视频 -->
<VideoView
android:id="@+id/video"
android:layout_width="match_parent"
android:layout_gravity="center"
android:layout_height="match_parent" />
MainActivity.java
public class MainActivity extends Activity
{
private VideoView videoView;
private MediaController mController;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取界面上的VideoView组件
videoView = findViewById(R.id.video);
// 创建MediaController对象
mController = new MediaController(this);
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0x123);
}
@Override public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults)
{
if (requestCode == 0x123
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 设为横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
File video = new File("/mnt/sdcard/movie.mp4");
if (video.exists()) {
videoView.setVideoPath(video.getAbsolutePath()); // ①
// 设置videoView与mController建立关联
videoView.setMediaController(mController); // ②
// 设置mController与videoView建立关联
mController.setMediaPlayer(videoView); // ③
// 让VideoView获取焦点
videoView.requestFocus();
videoView.start(); // 开始播放
}
}
}
}
配置
<!-- 授予该程序读取外部存储器的权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
MediaPlayer和SurfaceView播放视频
使用MediaPlayer播放音频,使用SurfaceView来显示MediaPlayer播放的图像输出。
步骤:
1.创建MediaPlayer对象,并让它加载指定的视频文件
2.在界面布局文件中定义SurfaceView组件,或在程序中创建SurfaceView组件,并为SurfaceView的SurfaceHolder添加Callback监听器
3.调用MediaPlayer对象的setDisplay(SurfaceHolder sh)方法将所播放的视频图像输出到指定的SurfaceView组件
4.调用MediaPlayer对象的start(),stop()和pause()方法控制视频的播放。
略
使用MediaRecorder录制音频
MediaRecorder类
略
控制摄像头拍照(详细)
Camera v2主要涉及如下API
- CameraManager:摄像头管理器
- CameraCharateristics:摄像头特性
- CameraDevice:代表系统摄像头
- CameraCaptureSession:当程序需要预览、拍照时,都需要先通过该类的实例创建Session。
控制其预览的方法为setRepeatingRequest();控制拍照的方法为capture()
为了监听CameraCaptureSession的差un构建过程以及监听CameraCaptureSession的拍照过程,Camera v2 API为CameraCaptureSession提供了StateCallback,CaptureCallback等内部类
- CameraRequest和CameraRequest.Builder:当程序调用setRepeatingRequset()方法进行浏览时,或调用capture()方法进行拍照时,都需要传入CameraRequest参数。CameraRequest代表了一次捕获请求,用于描述图片的各种参数设置。CameraRequest.Builder负责生成CameraRequest对象。
Android 9对相机API进行了进一步增强,支持双摄像头,多摄像头。实现功能有:无缝缩放、散景、立体效果等。还允许调用合适或融合的相机数据流,以便在不同的摄像头之间切换。
控制拍照的步骤:</