Получение изображения с камеры через intent.

Ответить
Jack_Starks
Сообщения: 2
Зарегистрирован: 31 мар 2012, 16:51

Получение изображения с камеры через intent.

Сообщение Jack_Starks » 12 дек 2012, 00:42

Добрый вечер. Необходимо вызвать стандартное приложение Камера, сделать фото и получить путь к сохраненному файлу(дабы потом его скопировать в другую папку). api version 8.
Первое решение.

Код: Выделить всё

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_RESULT_CODE);
@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {

		switch (requestCode) {
		
		case CAMERA_RESULT_CODE:
		if (resultCode == RESULT_OK) {
				Uri selectedImageUri = data.getData();
				String FilePath = getPath(selectedImageUri);
				}
			break;
		}
	}
где

Код: Выделить всё

public String getPath(Uri uri) {
		
		String[] projection = { MediaStore.Images.Media.DATA };
		Cursor cursor = managedQuery(uri, projection, null, null, null);
		int column_index = 	cursor.getColumnIndex(MediaStore.Images.Media.DATA);
		cursor.moveToFirst();
		if(column_index!=-1){
		return cursor.getString(column_index);
		}
		else
			return uri.getPath();
		}
	}
Решение работает, но только на телефонах. На планшетах получаем NullPointerexception так как getData возвращает null.
Второе решение. Добавляем к первому параметр с указанием пути к сохраняемому файлу.

Код: Выделить всё

File storageDir = new File(Environment.getExternalStorageDirectory()+ "/Directory/");
										
											if (!storageDir.exists()) {
												storageDir.mkdirs();
											}
File image = new File(storageDir, "image.jpg");
											 mCurrentPhotoPath = image.getAbsolutePath();
											
											Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
											cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(image));
											startActivityForResult(cameraIntent, CAMERA_RESULT_CODE);
в OnActivityResult() уже можно работать с mCurrentPhotoPath, где и будет наш путь к файлу.
Данное решение прекрасно работает на планшетах, но на телефонах получаем RuntimeException и поэтому onActivityResult не получает код Result_Ok. Файл при этом не всегда создается по указанному пути.

В общем вопрос заключается в том, чтобы найти решение адекватно работающее на телефонах и планшетах)
P.S. http://mobile.tutsplus.com/tutorials/an ... he-camera/
http://developer.android.com/training/c ... asics.html

Ответить