private static final int REQUEST_CODE_IMAGE = 1000;
private String importFileName = "";
private void cameraIntent() {
importFileName = getString(R.string.app_name) + new Random().nextInt();
startActivityForResult(getCameraIntent(context, importFileName), REQUEST_CODE_IMAGE);
}
public Intent getCameraIntent(Context context, String fileName) {
Intent chooserIntent = null;
List intentList = new ArrayList<>();
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePhotoIntent.putExtra("return-data", true);
takePhotoIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, context.getResources().getConfiguration().orientation);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(context.getExternalCacheDir(), fileName)));
intentList = addIntentsToList(context, intentList, Collections.singletonList(takePhotoIntent));
if (intentList.size() > 0) {
String title = context.getResources().getString(R.string.choose);
chooserIntent = Intent.createChooser(intentList.remove(intentList.size() - 1), title);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]{}));
}
return chooserIntent;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUEST_CODE_IMAGE:
if (resultCode == RESULT_OK) {
onCaptureImageResult(data);
}
break;
}
}
private void onCaptureImageResult(Intent data) {
Uri imageUri;
if (data == null) {
imageUri = Uri.fromFile(new File(getExternalCacheDir(), importFileName));
} else {
imageUri = data.getData();
if (imageUri == null)
imageUri = Uri.fromFile(new File(getExternalCacheDir(), importFileName));
}
}
If you get permissions (camera, read/write external storage permissions) from user, this code snippet will work correctly. You can call cameraIntent().