Запустить камеру из службы переднего плана, если для приложения предоставлено START_ACTIVITIES_FROM_BACKGROUND (Android Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Запустить камеру из службы переднего плана, если для приложения предоставлено START_ACTIVITIES_FROM_BACKGROUND (Android

Сообщение Anonymous »

Процесс моего приложения запускает службу переднего плана, когда он получает boot_completed action
Эта служба предназначена для записи видео (приложение камеры приборной панели), которая использует камеру и микрофон.
Чтобы запустить камеру с службы переднего плана на Android 11+. Один из условий должен быть выполнен (исключения от ограничений на запуск камеры/микросхема из службы переднего плана) https://developer.android. .com/guide/components/foreground-services#bg-access-restriction-exemptions
Единственное исключение, которое я могу использовать:

Служба запускается с приложения, которое имеет привилегированное разрешение
start_activities_from_background. От пользователя пользователь просто хочет, чтобы видеозапись была запущена автоматически, когда он начинает водить машину, он не хочет, чтобы вручную делала приложение видимым или начинает записывать из уведомления, ему не волнует все это, что является Хорошо, это 2021 год, и такие вещи могут быть сделаны автоматически, но спасибо Google за такие ограничения в 2021 году, да, мы должны заботиться о безопасности частных личных данных пользователя, но они просто могут добавить Founal_camera , founal_record_audio Разрешения с ручным обзором на консоли Google Play, как и с помощью Access_background_location
Если я правильно понял, чтобы получить start_activities_from_background разрешение, которое я должен иметь одно из условий MET (исключения из ограничений на начальные действия с фона). /code> разрешение, потому что, если он был предоставлен пользователем до, тогда не требуется взаимодействие от пользователя, и приложение может запустить деятельность с фона. Это может быть предоставлено с целью (настройки. Я не понимаю ... < /p>
Если да, то я могу использовать камеру в службе переднего плана, которая была начата с какого -то фонового действия < /p>
Но все же < /p>

Код: Выделить всё

fun isCameraAllowedForPackage(context: Context): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val manager = context.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
val res = manager.unsafeCheckOpNoThrow(
AppOpsManager.OPSTR_CAMERA,
Process.myUid(),
context.packageName
)
res == AppOpsManager.MODE_ALLOWED
} else {
true
}
}
Возвращает false для моего Samsung S10 (Android 11) в службе переднего плана, прежде чем я попытаюсь использовать камеру
Почему?
Если я сделаю приложение видимым, по крайней мере, один раз (запустите действие в приложении), то служба переднего плана может запустить камеру (этот метод возвращает true < /code>), даже если экран телефона - Выключен < /p>
Я также пытался использовать эмулятор Pixel (Android 11), и для этого приложения есть другое поведение - может начать использование камеры на переднем плане, которая была начата в фоновом режиме. System_alert_window разрешение. Так что мне не нужно ни одного из этих https://developer.android.com/guide/com ... exceptions
Я не понимаю. В основном эмулятор не следует этим правилам. Следующее сообщение < /p>

android.hardware.camera2.cameraaccessexception: camera_disabled (1):
valideclientpermissionslocked: 1426: Caller "my_app_package_name"
(PID 10300, UID 29860) не может открыть камеру «0», когда конфиденциальность датчика включена
< /p>
< /blockquote>
или < /p>

Ошибка произошла во время использования камеры.
android.hardware.camera2.cameraAccessexception: camera_disabled (1):
connecthelper: 2198: камера "2" отключена по политике < / p>
< /blockquote>
или < /p>

android.hardware.camera2.cameraaccessexception: Camera_disabled (1): validateclientpermissionslocked: 1416: Caller "my_app_package_name"
(pid 10376, uid 25653) не может открыть камеру "0" из фонового (вызов
uid 10376 Proc State 8). Откройте
камера

Пользователь может начать записывать вручную с Activity/Notification/Widget/Floating Window или записи может начинаться автоматически на основе зарядки/ Bluetooth/Etc Events (зарегистрированные события вещания в службе переднего плана для записи) Ни в коем случае, поэтому он возвращает true в таких случаях, а затем приложение не может открыть камеру с помощью Camera_disabled ошибка, я не понимаю.
Я спросил пользователей На эту проблему они ответили, что это может произойти несколько раз (не всегда, они не устанавливают никакой политики для камеры), когда запись автоматически запускается/останавливается на событиях зарядки/Bluetooth. Поэтому, конечно, приложение на своих телефонах обычно может открыть камеру, оно разрешено использовать, кажется, иногда глупая система операции предотвращает использование камеры, и я не понимаю, почему нет никакой информации об этом случае В ограничениях я упоминал ранее. Таким образом, для пользовательского приложения работало некоторое время без проблем, они открыли деятельность приложения хотя бы один раз (на Samsung Android 11+ они должны это сделать), поэтому у сервиса переднего плана на 100% было разрешение использовать камеру, но все же Затем через некоторое время эта ошибка произошла для них. < /p>
Это другая проблема. Если бы это не было разрешено для моего процесса приложения, то я бы получил такую ​​ошибку

https://developer.android.com/guide/com ... strictions
В любом случае Я, как я уже упоминал, у меня есть метод, чтобы проверить, разрешена ли камера для использования для процесса моего приложения, прежде чем я открою его < /p>
Есть так много проблем с этим.
Телефоны (из разных производителей) ведут себя по -разному.
Некоторые неожиданные исключения во время использования камеры. приложения, которое запускает службу переднего плана, в данном случае перед на переднем плане теперь разрешено использовать камеру, но все же некоторые проблемы с открытием камеры могут произойти, в то время как тот же сервис переднего плана работал в течение некоторого времени

Подробнее здесь: https://stackoverflow.com/questions/704 ... nd-granted
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»