[英]camera intent not returning to fragment not calling on activity result
我试图打开相机拍摄图像,存储在字节数组中,然后在片段上显示图像。
相机正在打开并拍摄照片,但是当您单击勾号时,它只会再次显示相机。
我检查了活动结果,但未调用它。 我具有所有正确的权限设置。
我在这里尝试了其他答案,但没有成功。
这是我打开片段中的相机的方法:
@AfterPermissionGranted(REQUEST_PERMISSIONS_ACTIVITY_REQUEST_CODE)
private void openCamera(){
// start main activity
String [] perms = {Manifest.permission.CAMERA};
if (EasyPermissions.hasPermissions(getActivity(), perms)){
// Start the Camera
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
} else {
Log.d("Chex ", "Check did not find permissions starting dialog to explain use of user permissions");
EasyPermissions.requestPermissions(this, "This app needs camera permissions to store reciepts", REQUEST_PERMISSIONS_ACTIVITY_REQUEST_CODE, perms);
}
}
这是片段中的onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("Chex ", "On activity results called " + resultCode);
if (resultCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE){
openCamera();
} else{
openCamera();
}
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
Bitmap bmp = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
transactionImageLocationByteArray = stream.toByteArray();
// Load the image into the imageview
Glide.with(getActivity()).asBitmap().load(transactionImageLocationByteArray).into(addTransactionCameraButon);
} else if (resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(getActivity(), "Image Capture Cancelled", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity(), "Image Capture Failed", Toast.LENGTH_SHORT).show();
}
}
}
编辑:
在requestPermission上添加:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d("Chex ", "Permission on request result came back with " + grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
编辑2:
将onActivityResult添加到了主活动(该片段的主机活动)中,但没有更改:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
如果您正在片段中调用openCamera方法,则需要检查一下
从onActivityResult()
移除super
。
删除这一行super.onActivityResult(requestCode, resultCode, data);
super将继承父类onActivityResult
您需要更改onActivityResult():
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
// Do something after user returned from app settings screen
openCamera();
} else if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
Bitmap bmp = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
transactionImageLocationByteArray = stream.toByteArray();
// Load the image into the imageview
Glide.with(getActivity()).asBitmap().load(transactionImageLocationByteArray).into(addTransactionCameraButon);
} else if (resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(getActivity(), "Image Capture Cancelled", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity(), "Image Capture Failed", Toast.LENGTH_SHORT).show();
}
}
}
编辑:将以下代码添加到您的Activity的onActivityResult()
方法中。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.yourFragmentId);
fragment.onActivityResult(requestCode, resultCode, data);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.