在Android中使用URI拍照的解决方案如下:
private Uri imageUri;
private void takePhoto() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
// 创建一个文件来存储拍照后的图片
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
ex.printStackTrace();
}
if (photoFile != null) {
// 获取文件的URI
imageUri = FileProvider.getUriForFile(this, "com.example.android.fileprovider", photoFile);
// 将URI添加到相机应用的Intent中
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
// 启动相机应用
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
}
}
}
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
String imageFileName = "IMG_" + timeStamp;
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName, ".jpg", storageDir);
return image;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
// 拍照成功,可以使用imageUri来获取拍照后的图片
// 例如,可以将图片显示在ImageView中
ImageView imageView = findViewById(R.id.imageView);
imageView.setImageURI(imageUri);
}
}
请注意,上述代码中的"com.example.android.fileprovider"是一个内容提供者的授权名称,需要在AndroidManifest.xml文件中进行配置。
上一篇:Android: 使用Transformations.switchMap在MVVM中实现连续调用
下一篇:Android: 使用viewModelscope和withContext时发生不可能的NullPointerException