Как заменить камеру Android программой которая берет изображение из галереи?
Как можно заменить камеру на приложение которое берет изображение из галереи ?
Давно интересовал этот вопрос. Часто приходится проходить анкетирование на разные ID.
И тут интересно например, а зачем каждый раз снимать паспорт ? Но приложения для которых это надо каждый раз включают камеру и предлагают сделать фото.
При чем я нашел программу которая подменяет приложение камеры. И все бы ничего. Но в 70% случаев аппаратное управление камерой интегрировано в такой опросник. То есть опросник не запускает приложение камеры. В нем встроенное свое.
И никто при этом и не думал встроить возможность загрузить фото из папки )
Обращение к камере в 90% случаев идёт через системный запрос, а не через прикладной.
Соответственно:
Рутовать устройство и лезть в драйвер камеры.
В драйвере камеры вносить изменения, чтобы во время доступа к ней - система\приложение давали вам выбор чего с этим запросом делать и куда его отправлять.
ZERGeich
Вот тут вы не правы. Приложению проще получить снимок с камеры через Intent
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Allow access to the camera and try again", Toast.LENGTH_SHORT).show();
requestPermissions(new String[]{Manifest.permission.CAMERA}, 0);
return true;
}
}
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
try {
File sharePath = new File(getCacheDir(), "share");
if (sharePath.mkdir()) {
Toast.makeText(this, "share dir created", Toast.LENGTH_SHORT).show();
}
photoFile = File.createTempFile(
"photo", /* prefix */
".png", /* suffix */
sharePath /* directory */
);
} catch (IOException ex) {
// Error occurred while creating the File
App.showToast("Error");
}
// Continue only if the File was successfully created
if (photoFile != null) {
String dop="PRO";
String ver = BuildConfig.VERSION_NAME;
if(!ver.endsWith("-pro")) {
dop="FREE";
}
Uri photoURI = FileProvider.getUriForFile(this,
"ru.a402d.paperang.fileprovider"+dop,
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, CAMERA_SELECT_CODE);
}
}else{
Toast.makeText(this, getString(R.string.need_camera), Toast.LENGTH_LONG).show();
}
Нужно только обеспечить еще возможность записи приложению камеры в файл, созданный приложением.
Тоесть там так.
Вот указатель на файл и разрещение в него писать.
Андроид кто из приложений сделает мне снимок ?
Тот смотрит кто из приложений понимает намеренение Android.CAMERA
Если таких несколько и не назначен дефолт, то показывается диалог выбора.
Приложение камера получает интент.
Делает снимок и пишет его в указанный файл.
А лезть к апи камеры напрямую - это слишком долго и жирно (свой велосипед на пару мегабайт)
Олег, а если разработчики не хотят чтобы им подсунули фоточку из папки, которую неизветсно когда и где сняли, может там чужие документы вообще сфотографированы? Тогда уже не так уж жирно.
Stalker_RED, я не согласен с 90 процентами.
А на счет вашего утверждения, то опять нет смысла технически ограничивать до маразма.
Если кто сильно хочет заморочиться секьюрностью пусть подключается к системе биометрии
или как поступают банки - пароль выдается по паспорту (нужен физически присутствовать в офисе для первоначального заключения договора)
Возможность подменить снимок камеры какой угодно шляпой из галереи - это дыра в безопасности размером с пролив Лаперуза. Таким образом я запросто могу "снять" фото, что я на самом деле - серый волосатый тролль с длинными ушами :)
mirekua, вы никогда не сталкивались с ситуацией, когда при аренде какой-то ерунды типа сноуборда вам предлагают оставить в залог пасспорт? Может быть сами даже оставляли. Это кстаатит запрешено по закону, но встречается очень часто, и люди оставляют документы.
Так вот, кто помешает этим прекрасным людям взявшим пасспорт в залог сфотографировать его?
И если приложуха позволяет загрузить фоточку из папочки, то кто помешает через пару месяцев, когда владелец даже забудет о том где он светил документы, набрать на этот пасспорт микрозаймов, например?
Stalker_RED, Речь в теме не о том. А вообще наличие микрозаймов Вы можете обнаружить спустя месяца 3 ))) То есть этот трюк можно провернуть и так. Взять паспорт и сразу взять микрозаймы )