Android 多媒体文件操作(图片)

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;
    }
}

这个方法中我写了两个

一个是获取相机的返回数据,一个是获取相册的返回数据。

效果图(使用相机拍照)

Android 多媒体文件操作(图片)

这样我们的调用相机拍照就完成了。非常的简单。

这样我们最最基础的调用我们的相机拍照算是完成了。

相册篇

关于权限

如何申请权限就不说了和上面的方法都是一样的,看一相机权限是啥就可以了。

<!--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();
    }
}

这样我们的图片选择就完成了

效果图

Android 多媒体文件操作(图片)

至此,这篇文章也结束了,告辞~

上一篇:百度语音助手怎么集成到自己的Fragment项目里面?(教你怎么避坑)


下一篇:permissionsdispatcher的用法(用起来并没有多好用)