【发布时间】:2019-04-06 09:46:42
【问题描述】:
在 Android 应用 Intent 中捕获图像时,每次都返回 null。请参阅下面我正在使用的代码。我尝试了多种方法来获得许可和意图集,但仍然无法获取数据。
相机动作
private void takePhotoFromCamera() {
if(ActivityCompat.checkSelfPermission(ObservationsView.this,
Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(getExternalCacheDir(),
String.valueOf(System.currentTimeMillis()) + ".jpg");fileUri = Uri.fromFile(file);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
cameraIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}else {
String[] permissionRequest = {Manifest.permission.CAMERA};
requestPermissions(permissionRequest, 8675309);
checkPermission();
}
}
这是响应代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK ) {
Uri selectedImg = null;
Bitmap bmp = null;
Bundle extras;
if (requestCode == CAMERA_REQUEST) {
selectedImg = data.getData();
extras = data.getExtras();
bmp = (Bitmap) extras.get("data");
}
else if (requestCode == CAMERA_REQUEST) {
selectedImg = fileUri;
// Bitmap mphoto = (Bitmap) data.getExtras().get("data");
try {
bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), fileUri);
if (bmp != null) {
bmp = getBitmapFromUri(fileUri);
}
}catch (IOException e) {
e.printStackTrace();
}
Uri tempUri = getImageUri(getApplicationContext(), bmp);
Intent passPhoto = new Intent(this, Photo.class);
passPhoto.putExtra("image",tempUri);
passPhoto.putExtra("Caller", getIntent().getComponent().getClassName());
startActivity(passPhoto);
}
【问题讨论】:
-
你是如何从相机
onActivityResult结果中获取数据的? -
您不需要返回的
Intent数据。图片位于fileUri。你可以从那里得到它。 -
目标版本是什么?您是否在某些平台或任何地方都面临这个问题?
-
您不需要
CAMERA权限即可使用默认相机拍摄 -
@SalmanKhan 我正在三星 S5 和 Android 6.0 上进行测试,但我在其他设备上也遇到了同样的问题
标签: android permissions android-camera-intent