Фотографии из внутренней камеры приложения неправильно сохранены в галерее - PullRequest
0 голосов
/ 05 июля 2018

У меня есть приложение для Android, и в нем я использую камеру для фотографирования. Я хочу, чтобы эти фотографии оставались на 100% внутренними по отношению к моему собственному приложению по соображениям конфиденциальности. На некоторых устройствах (не на всех) фотографии, сделанные в моем приложении, копируются в камеру на телефоне. Я хочу знать, могу ли я что-нибудь сделать, чтобы они не попали в камеру. Ниже то, что я пытался.

Прежде чем перейти к тому, что я пробовал, я видел этот пост на SO , в котором предлагается пойти в рулон камеры и удалить снимки. Это НЕ идеальная ситуация по нескольким причинам:

  1. Если произойдет сбой или остановка моего приложения до того, как я получу возможность удалить изображение, оно останется там.
  2. Даже если я поймаю их вовремя и удалю, они все еще будут существовать в течение короткого времени при прокате камеры, что может привести к доступу к ним других приложений, даже если вероятность невелика.
  3. Я не хочу вообще удалять объекты с камеры пользователя из-за боязни удалить что-то, чего не должен делать я.
  4. Это похоже на безумно ужасный и хакерский обходной путь, и это 7 лет назад, так что я надеюсь, что сейчас есть что-то лучшее.

Я сохраняю свои фотографии непосредственно во ВНУТРЕННЕЕ хранилище для моего приложения.

File folder = new File(activity.getFilesDir(), "pictures");
folder.mkdirs();
File file = new File(folder.getAbsolutePath() + File.separator + filename + ".jpeg");
URI uri = FileProvider.getUriForFile(activity, myAppsFileProviderAuthority(), file);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
activity.startActivityForResult(intent, INTENT_RESULT_VALUE);

Из того, что я могу сказать, это само по себе должно помешать кому-либо еще касаться моих фотографий, но они все еще отображаются в галерее на некоторых устройствах.

Я также попытался сохранить файл во внешнем каталоге хранения вместо внутреннего хранилища, используя getExternalFilesDir() вместо activity.getFilesDir() выше, поскольку в соответствии с документацией Android :

если вы хотите, чтобы фотографии оставались конфиденциальными только для вашего приложения, вместо этого вы можете использовать каталог, предоставленный getExternalFilesDir().

Тот же результат, и я все равно не хочу сохранять изображения здесь.

Я также попытался создать временный файл вместо обычного файла для временного хранения моего изображения, но получаю тот же результат:

File file = File.createTempFile(filename, ".jpeg", folder);

Я также натолкнулся на статью, в которой говорилось, что вы можете создать файл с именем .nomedia в каталоге, где существуют фотографии, что может помешать некоторым сканерам файлов получить доступ к фотографиям изнутри, но это ничего не остановит.

Существуют ли другие варианты, чтобы мои фотографии были на 100% внутренними для моего приложения, не заходя в рулон камеры и не удаляя файлы?

1 Ответ

0 голосов
/ 06 июля 2018

Я хочу, чтобы эти фотографии оставались на 100% внутренними по отношению к моему собственному приложению по соображениям конфиденциальности

Тогда вам не следует использовать ACTION_IMAGE_CAPTURE. По определению, это делегирует фотографирование произвольному приложению, одному из сотен возможных приложений, основанных на устройстве и пользователе.

Вместо этого, сделайте снимок самостоятельно, в своем собственном приложении, либо с помощью API-интерфейсов камеры, либо с помощью библиотеки, которая обернет их .

На некоторых устройствах (не на всех) фотографии, сделанные в моем приложении, копируются в фотоаппарат на телефоне

Некоторые приложения камеры сохраняют фотографии в нужном месте, возможно, в дополнение к копированию фотографии в ваше местоположение EXTRA_OUTPUT. Это зависит от разработчиков приложений для камер, а не от вас. Возможно, такое поведение является ошибкой, но у вас нет практического способа заставить любого разработчика приложения камеры исправить эту ошибку, не говоря уже о разработчиках всех приложений камеры с ошибками.

...