#android #android-camera
#Android #android-камера
Вопрос:
Я использую следующий код, чтобы сделать снимок с помощью встроенной камеры:
private File mImageFile;
private String mTempImagePath;
public static Uri imageUri;
public void imageFromCamera() {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Log.d("fototemp", "No SDCARD");
} else {
mImageFile = new File(Environment.getExternalStorageDirectory() File.separator "testFolder", "Pic" System.currentTimeMillis() ".jpg");
imageUri = Uri.fromFile(mImageFile);
DataClass dc = (DataClass) getApplicationContext();
File tempFile = new File(Environment.getExternalStorageDirectory() File.separator "testFolder");
Uri tempUri = Uri.fromFile(tempFile);
dc.setString(DataClass.IMAGE_PATH, tempUri.toString());
Log.d("fototemp", "ImagePath: " tempUri.toString());
mTempImagePath = mImageFile.getAbsolutePath();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mImageFile));
startActivityForResult(intent, 0);
}
}
Путь к изображению, который я распечатываю методом imageFromCamera (), выглядит следующим образом: 4file:///file:/mnt /sdcard/TestFolder
Теперь, когда я пытаюсь получить доступ к этим фотографиям с помощью managedQuery, я получаю другой каталог. MediaStore.Изображения.Эскизы.EXTERNAL_CONTENT_URI.toString() выдает содержимое://media/external/images / thumbnails
В чем разница между этими двумя путями? И как я могу заставить managedQuery перейти к карте TestFolder для поиска изображений?
редактировать: я пытаюсь подключиться:
Uri phoneUriII = Uri.parse(Environment.getExternalStorageDirectory() File.separator "testFolder");
imagecursor = managedQuery(phoneUriII, img, null,null, MediaStore.Images.Thumbnails.IMAGE_ID "");
но этот код выходит из строя
Комментарии:
1. Вы имеете в виду, что хотите получить реальный путь к изображению из объекта URL? Нравится это ?
2. Я хочу, чтобы папка, в которой я сохраняю свои изображения, была преобразована в Uri, чтобы я мог передать i методу managedQuery.. Я думаю
3. Разве вы не можете просто использовать URL, который вы получаете из MediaStore, для извлечения двоичного потока? Попробуйте вызвать getData () для него или с помощью
getContentResolver().openOutputStream(uri)
.4. Я тоже пробовал это (Uri temp = Uri.parse(data.toURI()); Log.d(«fototemp», data.toURI());) но он выводит «Фотография сделана: #намерение; действие =встроенные данные; конец», что также не является правильным путем. Совершенно запутался в этой теме
Ответ №1:
Извините, не совсем понимаю ваш вопрос.
Просто отправьте это как путь к URI.
Environment.getExternalStorageDirectory() File.separator «Тестовая папка»
Также проверьте, есть ли у вас разрешения на запись на SD-карту.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Комментарии:
1. проблема не в записи, потому что я могу просматривать сделанные фотографии в галерее. Я пытаюсь использовать Uri phoneUriII = Uri.parse(Environment.getExternalStorageDirectory() File.separator «TestFolder»); imagecursor = managedQuery(phoneUriII, img, null, null, MediaStore. Изображения. Эскизы. IMAGE_ID «»); но это приводит к сбою
Ответ №2:
Я использую эту функцию в паре проектов, и она работает нормально.
/**
* Retrieves physical path to the image from content Uri
* @param contentUri
* @return
*/
private String getRealImagePathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}