android 调用系统的照相机和图库实例详解


在Android开发中,调用系统照相机和图库是常见的需求,通常通过Intent来实现。下面将分别给出调用系统照相机和图库的示例代码,并附带简要的解释。

### 调用系统照相机

要调用系统的照相机应用,你需要创建一个`Intent`,设置其`Action`为`MediaStore.ACTION_IMAGE_CAPTURE`,并可能需要提供一个用于保存拍摄照片的URI(如果你需要直接访问这张照片的话)。


// 创建一个Intent来调用照相机
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

// 如果你希望获取拍摄的照片,需要提供一个Uri来保存照片
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
    // 创建一个文件来保存照片
    File photoFile = null;
    try {
        photoFile = createImageFile(); // 假设你有一个方法来创建文件
    } catch (IOException ex) {
        // 错误处理
    }

    // 继续照片拍摄流程
    if (photoFile != null) {
        Uri photoURI = FileProvider.getUriForFile(this,
                "com.example.android.fileprovider",
                photoFile);
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);

        // 启动照相机
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}

// 假设的createImageFile方法,用于创建保存照片的文件
private File createImageFile() throws IOException {
    // 这里实现文件的创建逻辑
    // ...
    return null; // 这里应返回创建的文件
}

注意:使用`FileProvider`来安全地共享文件给照相机应用,这需要在你的`AndroidManifest.xml`中声明`FileProvider`。

### 调用系统图库

要调用系统的图库应用,让用户选择一张图片,你可以使用`Intent`的`ACTION_PICK`或`ACTION_GET_CONTENT`,并设置类型为`image/*`。


// 创建一个Intent来调用图库
Intent pickImageIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickImageIntent.setType("image/*"); // 指定数据类型为图片

// 检查是否有应用可以处理这个Intent
if (pickImageIntent.resolveActivity(getPackageManager()) != null) {
    // 启动图库
    startActivityForResult(pickImageIntent, REQUEST_IMAGE_PICK);
}

在`onActivityResult`方法中,你可以处理用户选择的图片。


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK && data != null && data.getData() != null) {
        // 用户选择了图片,可以在这里处理Uri
        Uri selectedImage = data.getData();
        // 使用Uri进行后续操作,如加载图片到ImageView等
    }
}

这两个示例展示了如何在Android应用中调用系统照相机和图库。请确保你的应用具有访问存储的权限,特别是在Android 6.0(API 级别 23)及以上版本中,你需要在运行时请求存储权限。