Android 多媒体文件操作
Overview
今天我们来看看如何操作Android的 相册和相机,并且我们需要看看如何才可以将我们的操作的图片1显示出来,废话不多说开始吧。
相机篇(最朴素的拍照方法)
我们都知道Android 调用摄像头是属于我们的危险权限,所以我们需要在运行时申请权限。
如何在运行时申请我们的相机权限。
首先:我们需要添加我们的申请编码,这个非常的重要,每个代码之间都是不可以重复的。他是唯一性的!
//PERMISSION CODE
final private static int OPEN_CAMERA_PERMISSION = 1;
final private static int OPEN_ALBUM_PERMISSION = 2;
//INTENT CODE
final private static int GET_CAMERA_RESULT = 1;
final private static int GET_ALBUM_RESULT = 2;
可以看到这里我申请了两组,分别用于权限申请代码和数据返回代码。
然后我们来看看如何操作我们的权限,作为一个危险权限。
第一步我们需要在用户清单中添加我们的权限:
<!--FOR CAMERA-->
<uses-permission android:name="android.permission.CAMERA" />
<!--FOR ALBUM-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这里就是两个代码,分别是 相机和相册的权限,但是他是危险权限,所以只在清单中申请肯定是不够的。
/*
this is check camera permission
*/
boolean checkPermissions(int permissionID) {
//CANERA
if (permissionID == OPEN_CAMERA_PERMISSION) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
//this is request CAMERA PERMISSION
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, OPEN_CAMERA_PERMISSION);
return false;
} else
return true;
}
//ALBUM
if (permissionID == OPEN_ALBUM_PERMISSION) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, OPEN_ALBUM_PERMISSION);
return false;
} else
return true;
}
return false;
}
这里申请了两个危险权限,一个是相机权限,一个是相册权限。如果有权限就会返回TRUE
如果没有就是返回FALSE
然后会自动的向用户申请权限。
如何查看权限申请结果
但是只向用户申请权限是不够的,我们还需要去查看我们的申请结果,看看代码:
@Override
//this is requestPermissionsResult
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1:
//this is check request result. if true open Camera
if (grantResults.length > 0 && permissions[0].equals(PackageManager.PERMISSION_GRANTED))
openCamera();
break;
case 2:
if (grantResults.length > 0 && permissions[0].equals(PackageManager.PERMISSION_GRANTED))
openAlbum();
break;
}
}
这个就是我们用来查看用户是否同意了指定权限的代码了。
如果用户同意了,我么需要打开我们的相册。
如何才可以打开我们的相册?
/*
open Camera
*/
void openCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, GET_CAMERA_RESULT);
}
这样我们就可以打开我们的相机了。
但是只打开了,没去获取时得不到任何图片的。
如何实现获取返回的图片数据
你需要一个onActivityResult
的方法来获取了
@Override
//this is onActivityResult
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
//CAMERA
case 1:
if (data != null)
//get data and get the data and create Bitmap to binding ImageView
((ImageView) this.findViewById(R.id.ImageView)).setImageBitmap((Bitmap) Objects.requireNonNull(data.getExtras()).get("data"));
break;
//ALBUM
case 2:
if (data != null) {
try {
//get album selected image to binding the imageView
((ImageView) this.findViewById(R.id.ImageView)).setImageBitmap(MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
break;
}
}
这个方法中我写了两个
一个是获取相机的返回数据,一个是获取相册的返回数据。
效果图(使用相机拍照)
这样我们的调用相机拍照就完成了。非常的简单。
这样我们最最基础的调用我们的相机拍照算是完成了。
相册篇
关于权限
如何申请权限就不说了和上面的方法都是一样的,看一相机权限是啥就可以了。
<!--FOR ALBUM-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这个就是我们的相机权限.再看看权限判断时候的代码吧:
if (permissionID == OPEN_ALBUM_PERMISSION) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, OPEN_ALBUM_PERMISSION);
return false;
} else
return true;
}
这个就是判断我们的相册权限是否申请的代码了。
如何打开相册
/*
open Album
*/
void openAlbum() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, GET_ALBUM_RESULT);
}
这个就是打开我们的相册的代码了。这里有个setType
的方法。这个方法是来指定我们的打开类型的代码。
如何获取我们的选择图片
还是在我们的onActivityResult
下添加下面的代码:
if (data != null) {
try {
//get album selected image to binding the imageView
((ImageView) this.findViewById(R.id.ImageView)).setImageBitmap(MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
这样我们的图片选择就完成了
效果图
至此,这篇文章也结束了,告辞~