Я сейчас работаю над небольшой частью моей дипломной работы. Я должен проверить, как вы можете получить местоположение пользователя без разрешения на местоположение. Одним из способов является то, что пользователю предлагается сделать снимок, и когда приложение «Камера» имеет разрешение на получение местоположения, вы можете считывать EXIF-данные с изображения, которое было сделано пользователем.
Я протестировал его на нескольких реальных устройствах (2x Android 9, 1x Android 6, 1x Android 7.1), и он работает на этих устройствах.
Но если я использую эмулятор (камера имеет разрешение на определение местоположения, служба определения местоположения включена, камера помечает местоположение для изображения) интерфейс Android EXIF не может считывать данные EXIF.
Если я сделаю снимок вручную с приложение Камера и посмотрите детали фотографии в галерее, местоположение сохранено.
У кого-нибудь есть опыт с этой проблемой?
РЕДАКТИРОВАТЬ: Самый важный код:
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
ex.printStackTrace();
}
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.example.readoutexifwithoutpermissions",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
private void readOutImageData() {
Log.i(TAG, currentPhotoPath);
try {
ExifInterface exif = new ExifInterface(currentPhotoPath);
File file = new File(currentPhotoPath);
Log.i(TAG, "size of file: " + file.length());
Log.i(TAG, "reading out something..." + exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE));
this.txtLatitude.setText(exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE));
this.txtLongitude.setText(exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE));
} catch (IOException e) {
e.printStackTrace();
}
}
private File createImageFile() throws IOException {
String imageFileName = "JPEG_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName,
".jpg",
storageDir
);
currentPhotoPath = image.getAbsolutePath();
return image;
}
РЕШЕНИЕ: я не знаю почему, но когда вы используете камеру через намерение, дополнительная информация не сохраняется. Если вы устанавливаете другое приложение камеры, например Open Camera, оно работает. (Происходит только в эмуляторе)