Я пытаюсь открыть камеру, сделать снимок, сохранить в массиве байтов, а затем отобразить изображение на фрагменте.
Камера открывается и делает снимок, но когда вы нажимаете галочку, она снова показывает камеру.
Я проверил результат активности, и он не вызывается. У меня есть все правильные настройки разрешений.
Я пробовал другие ответы здесь, но безуспешно.
Вот как я открываю камеру во фрагменте:
@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();
}
}
}
EDIT:
Добавление по запросуPermission:
@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);
}
onActivityResult
и во фрагменте, и в действии, и в действии у вас есть вызов super, но не во фрагменте, верно? - person Suleyman   schedule 20.04.2018