Сбой приложения после съемки фотографии только на телефонах samsung
Цитата:Я разрабатываю приложение для android, в котором пользователь может выбрать из галереи или щелкнуть фотографию через камеру телефона и сохранить ее в папке приложения под названием "FiZZ".Камера часть приложения работает отлично на всех телефонах android, кроме Samsung.Приведенный ниже код вызывает исключение nullpointerexception в image.setPath(fileUri.getPath()); и завершает работу.
Что я уже пробовал:
MainActivity.java
Ниже показано, как я делаю фотографию и сохраняю ее в папке /DCIM/FiZZ:
/**
* сделайте фотографию
*/
частная пустота activeTakePhoto() {
заключительное диалоговое окно = новое диалоговое окно(в MainActivity.это);
TakePictureIntent намерение = новое намерение(система хранения mediastore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent. resolveActivity(getPackageManager ())! = null) {
int MEDIA_TYPE_IMAGE = 1;
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); / / создайте файл для сохранения изображения
takePictureIntent. putExtra(MediaStore.EXTRA_OUTPUT, fileUri); / / установить имя файла изображения
// запустите намерение захвата изображения
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
пробовать {
FileOutputStream outputStream_image = openFileOutput(file_image, MODE_WORLD_READABLE);
outputStream_image.записи(строки.метод getbytes());
outputStream_image.рядом();
Тост.makeText(getBaseContext(), "расположение изображения", тосты.LENGTH_SHORT).показать();
} catch (исключение e) {
е.печатные();
}
}
}
private Uri getOutputMediaFileUri(int MEDIA_TYPE_IMAGE) {
// Todo автоматически сгенерированные заглушки метода
если(isExternalStorageWritable()) {
//Toast. makeText(getBaseContext (), "value:" + Uri.fromFile(getOutputMediaFile(MEDIA_TYPE_IMAGE)), Toast.LENGTH_LONG). показать();
return Uri.fromFile(getOutputMediaFile(MEDIA_TYPE_IMAGE));
}
ещё
возвращать null;
}
/ * Проверяет, доступно ли внешнее хранилище для чтения и записи */
общественная логическое isExternalStorageWritable() {
Строка состояния = среда.getExternalStorageState();
если (окружающая среда.MEDIA_MOUNTED. equals(состояние)) {
вернуть true;
}
возвращать false;
}
частный файл getOutputMediaFile(тип int) {
// Чтобы быть в безопасности, вы должны проверить, что SD-карта установлена
// перед этим используйте Environment.getExternalStorageState ().
Файл mediaStorageDir = новый файл (Environment. getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "шипение");
// Это место работает лучше всего, если вы хотите, чтобы созданные изображения были общими
// между приложениями и сохраняться после удаления вашего приложения.
// Создайте каталог хранилища, если он не существует
если (! mediaStorageDir.существует()) {
если (! mediaStorageDir.mkdirs()) {
Log. d("FiZZ", " не удалось создать каталог");
Toast. makeText(getBaseContext (), "создание каталога файлов не удалось", Toast.LENGTH_LONG). показать();
возвращать null;
}
}
// Создать имя медиафайла
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss"). format(новая дата());
int MEDIA_TYPE_IMAGE = 1;
if (type == MEDIA_TYPE_IMAGE){
//String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss"). format(новая дата());
Строка fname= "IMG_" + timeStamp +". jpg";
mediaFile = новый файл (mediaStorageDir. getPath() + File. separator + "IMG_" + timeStamp +". jpg");
} еще {
возвращать null;
}
возврат медиафайла;
}
Вызывается случай request_image_capture:
дело REQUEST_IMAGE_CAPTURE:
if (requestCode == REQUEST_IMAGE_CAPTURE &&
resultCode == RESULT_OK) {
String filePath = imageFile. getAbsolutePath();
String imageName = String. valueOf(mediaFile);
Курсор курсор =
getContentResolver (). query(MediaStore.Изображения.Средства массовой информации.EXTERNAL_CONTENT_URI,
новая строка[]{MediaStore.Изображения.Средства массовой информации._ИДЕНТИФИКАТОР},
Система хранения mediastore.Изображения.Средства массовой информации.Данные +"=? ",
новая строка[]{filePath}, null);
if (cursor != null & & amp; cursor.moveToFirst()) {
инт column_index_data = курсор.getColumnIndexOrThrow(
Система хранения mediastore.Медиаколумны._ИДЕНТИФИКАТОР);
String picturePath = cursor. getString(column_index_data);
MyImage image = новый MyImage();
изображения.setTitle(имя_образа);
изображения.setDescription(" ");
изображения.setDatetime(системы.currentTimeMillis());
image. setPath(picturePath);
изображения.setName(нуль);
image. setPriority ("выкл");
изображений.добавить(изображения);
daOdb. addImage(изображение);
адаптер.notifyDataSetChanged();
курсор.рядом();
} еще {
MyImage image = новый MyImage();
изображения.setTitle(имя_образа);
изображения.setDescription(" ");
изображения.setDatetime(системы.currentTimeMillis());
изображения.setPath(fileUri.getPath());//исключение NullPointerException
изображения.setName(нуль);
image. setPriority ("выкл");
изображений.добавить(изображения);
daOdb. addImage(изображение);
адаптер.notifyDataSetChanged();
//swipelist.invalidateViews();
}
}
wseng
какую ошибку вы получаете ?
abhay1722
Я получаю исключение nullpointerexception в image. setPath(fileUri. getPath());
wseng
так что он отлично работает во всех android-телефонах, только разбившихся на Samsung ? Какова версия android вашего телефона Samsung ?
abhay1722
4.4.2, ядро галактики 2.It также происходит сбой на Galaxy Note 3, версия 5.0
wseng
Я думаю, это потому, что размер изображения не поддерживается.
abhay1722
Извините, но я не думаю, что это из-за размера изображения.Я свел настройки своей камеры к минимуму, так что она щелкает изображение низкого качества с небольшим размером.Но все равно приложение выходит из строя.