Я пытаюсь установить изображение своих кнопок изображения, когда пользователь выбирает фотографию из галереи или снимает фотографию с помощью камеры. Проблема в том, что мои ImageButtons просто изменены на пустой образ, но я получаю каталог файлов. Что я делаю не так? Я создал свой ImageIntent и onActivityResult из этого ответа camera & gallery. Но вот мой onActivityResult метод:setImageURI не работает
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_IMAGE_CAPTURE) {
final boolean isCamera;
if (data == null) {
isCamera = true;
} else {
final String action = data.getAction();
if (action == null) {
isCamera = false;
} else {
isCamera = action
.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
}
}
Uri selectedImageUri;
if (isCamera) {
selectedImageUri = outputFileUri;
} else {
selectedImageUri = data == null ? null : data.getData();
}
ImageButton pic1 = (ImageButton) findViewById(R.id.ibPic1);
Toast.makeText(this, "Image saved to:\n" + selectedImageUri,
Toast.LENGTH_LONG).show();
pic1.setImageURI(selectedImageUri);
}
}
}
Так я знаю из Toast, что я получаю Ури. Я пробовал this answer и различные другие решения, которые связаны с каким-то растровым изображением, но они всегда приводят к сбоям в приложении и исключения из памяти.
Редактировать
метод OnClick для запуска намерения изображения:
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.ibPic1:
openImageIntent();
break;
}
}
Image пристальный метод
private void openImageIntent() {
// Determine Uri of camera image to save.
final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "Klea" + File.separator);
root.mkdirs();
final String fname = Sell.getUniqueImageFilename();
final File sdImageMainDirectory = new File(root, fname);
outputFileUri = Uri.fromFile(sdImageMainDirectory);
// Camera.
final List<Intent> cameraIntents = new ArrayList<Intent>();
final Intent captureIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final PackageManager packageManager = getPackageManager();
final List<ResolveInfo> listCam = packageManager.queryIntentActivities(
captureIntent, 0);
for (ResolveInfo res : listCam) {
final String packageName = res.activityInfo.packageName;
final Intent intent = new Intent(captureIntent);
intent.setComponent(new ComponentName(res.activityInfo.packageName,
res.activityInfo.name));
intent.setPackage(packageName);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
cameraIntents.add(intent);
}
// Filesystem.
final Intent galleryIntent = new Intent();
galleryIntent.setType("image/*");
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
// Chooser of filesystem options.
final Intent chooserIntent = Intent.createChooser(galleryIntent,
"Vælg kilde");
// Add the camera options.
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
cameraIntents.toArray(new Parcelable[] {}));
startActivityForResult(chooserIntent, REQUEST_IMAGE_CAPTURE);
}
Получить уникальный метод имя файла:
private static String getUniqueImageFilename() {
// TODO Auto-generated method stub
String fileName = "img_" + System.currentTimeMillis() + ".jpg";
return fileName;
}
Are как галерея и камера не работает? Вы можете проверить оба? – berserk
Не работают. Тост говорит «файл: // .....» для камеры и «content: // ......» для галереи. –
В камере, вы получите точный uri, но в случае с галереей вы получаете контент Uri. – berserk