Android Эмулятор EXIF ​​Data - PullRequest
0 голосов
/ 04 марта 2020

Я сейчас работаю над небольшой частью моей дипломной работы. Я должен проверить, как вы можете получить местоположение пользователя без разрешения на местоположение. Одним из способов является то, что пользователю предлагается сделать снимок, и когда приложение «Камера» имеет разрешение на получение местоположения, вы можете считывать 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, оно работает. (Происходит только в эмуляторе)

1 Ответ

0 голосов
/ 04 марта 2020

Местоположение, скорее всего, сохраняется как метаинформация в медиа-хранилище, а не в exif-заголовке jpg.

Загрузите jpg в p c и проверьте там exif, чтобы увидеть.

Вы также можете запросить медиа-магазин для определения местоположения. Вам не нужно разрешение на местоположение, но тогда вам нужно другое специальное разрешение. Ну, на Android Q.

У меня есть устройство Android 8, где приложение камеры уже так себя ведет.

Ужасно терять всю информацию, когда вы используете файл где-то еще или делаете резервная копия.

...