Android 7.0实现拍照和相册选取图片功能
本攻略将详细介绍如何在Android 7.0及以上版本中实现拍照和相册选取图片的功能。
1. 添加权限和配置文件提供者
首先,我们需要在AndroidManifest.xml文件中添加相应的权限和配置文件提供者。以下是示例代码:
<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"
package=\"com.example.myapplication\">
<uses-permission android:name=\"android.permission.CAMERA\" />
<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />
<application>
...
<provider
android:name=\"androidx.core.content.FileProvider\"
android:authorities=\"com.example.myapplication.fileprovider\"
android:exported=\"false\"
android:grantUriPermissions=\"true\">
<meta-data
android:name=\"android.support.FILE_PROVIDER_PATHS\"
android:resource=\"@xml/file_paths\" />
</provider>
...
</application>
</manifest>
在上述示例中,我们添加了相机权限和写入外部存储权限。同时,我们还添加了一个文件提供者,用于提供拍照时保存图片的文件路径。
2. 创建文件路径配置文件
接下来,我们需要创建一个XML文件来配置文件路径。在res/xml目录下创建一个名为file_paths.xml的文件,并添加以下代码:
<paths xmlns:android=\"http://schemas.android.com/apk/res/android\">
<external-path name=\"my_images\" path=\"Pictures\" />
</paths>
在上述示例中,我们配置了一个名为my_images的外部路径,用于保存拍照时的图片。
3. 实现拍照功能
现在,我们可以开始实现拍照功能了。以下是一个示例代码:
private static final int REQUEST_IMAGE_CAPTURE = 1;
private String currentPhotoPath;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
ex.printStackTrace();
}
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
\"com.example.myapplication.fileprovider\",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat(\"yyyyMMdd_HHmmss\").format(new Date());
String imageFileName = \"JPEG_\" + timeStamp + \"_\";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName,
\".jpg\",
storageDir
);
currentPhotoPath = image.getAbsolutePath();
return image;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
// 拍照成功,处理图片
// 可以使用currentPhotoPath获取拍照后保存的图片路径
}
}
在上述示例中,我们首先创建一个Intent来启动相机应用,并指定拍照后保存图片的路径。然后,我们使用FileProvider来获取图片的URI,并将其作为Extra参数传递给相机应用。最后,在onActivityResult方法中,我们可以处理拍照后的图片。
4. 实现相册选取图片功能
除了拍照功能,我们还可以实现相册选取图片的功能。以下是一个示例代码:
private static final int REQUEST_IMAGE_PICK = 2;
private void pickImageFromGallery() {
Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickIntent, REQUEST_IMAGE_PICK);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK) {
if (data != null) {
Uri selectedImage = data.getData();
// 处理选取的图片
}
}
}
在上述示例中,我们创建一个Intent来启动相册应用,并使用ACTION_PICK动作指定选取图片的操作。然后,在onActivityResult方法中,我们可以获取选取的图片的URI,并进行处理。
通过以上步骤,你可以在Android 7.0及以上版本中实现拍照和相册选取图片的功能。
希望这个攻略对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android7.0实现拍照和相册选取图片功能 - Python技术站