通过本篇博客,你将学到以下知识点:
1.学会如何打开Android系统中相册的图片,视频,并使用这些图片,视频。
2.学会如何打Android开照相机进行照相,录像,并使用这样图片和视频。
下面我将展示两种方法来实现这些需求,注意:以下代码要用真机测试才行。
效果展示先:
一. 第一种方法:
①.想顺利的打开Android手机中的相册和照相机,首先我们要在清单中注册一些权限:
<!--使用相机硬件的权限-->
<uses-permission android:name="android.permission.CAMERA"/>
<!--录音的权限-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--过滤不支持相机的设备-->
<uses-feature android:name="android.hardware.Camera"/>
②.MainActivity的代码:
/**
* 通过相机拍照返回的Bitmap有两种方式:
* 1.不传入MediaStore.EXTRA_OUTPUT时,直接由data返回一个缩略图
* 2.当传入MediaStore.EXTRA_OUTPUT时,可以通过设置的图片保存路径来获取完整图片
*/
public class MainActivity extends AppCompatActivity {
private ImageView iv;
private VideoView videoView;
private final static int FLAG_REQUEST_SYSTEM_IMAGE = 0;
private final static int FLAG_REQUEST_CAMERA_IMAGE = 1;
private final static int FLAG_REQUEST_CAMERA_VIDEO = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
videoView = (VideoView) findViewById(R.id.video);
}
public void doclick(View view) {
switch (view.getId()) {
case R.id.btn_pick_imager:
// TODO 选取系统相册图片
doPickImageFromSystem();
break;
case R.id.btn_open_pick_imager:
// TODO 打开相机拍照
doOpenCameraForImage();
break;
case R.id.btn_open_pick_video:
// TODO 打开相机录像
doOpenCameraForVideo();
break;
}
}
private void doPickImageFromSystem() {
/**
* 参数一:打开系统相册的ACTION
* 参数二:返回数据的方式(从系统相册的数据库获取)
*/
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, FLAG_REQUEST_SYSTEM_IMAGE);
}
private void doOpenCameraForImage() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//todo 仅当设置了MediaStore.EXTRA_OUTPUT参数时,系统将不再返回缩略图,而是会被完整保存以下路径
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("/sdcard/test.jpg")));
startActivityForResult(intent,FLAG_REQUEST_CAMERA_IMAGE);
}
private void doOpenCameraForVideo() {