Задача Описание
У меня есть нативное приложение, которое требует прочиков Bluetooth. На большинстве устройств Android это работает отлично, но на Huawei vog -l29 , работающие с EMUI, поток разрешений полностью не выполняется:
- Запрос разрешения не показывает диалогу - requestMultiple () returns, не показывая кнопку System Recision Recision - requestMultiple () , не показывая кнопку System Recision Recision. Ничего не делает - opensettings () из React -cnative -permissions , но не перемещается в настройки
- разрешения существуют в настройках приложения - я могу видеть разрешение Bluetooth в настройках приложения Br/OL>
- Model: HUAWEI VOG-L29
- Android Version: 10
- React Native Version: 0.76.9
- Expo Version: 52.0.47 < /li>
< /ul>
текущая реализация < /h2>
Запрос разрешения к Hook < /h3>- opensettings () ничего не делаетКод: Выделить всё
// src/store/app-status/hooks/useRequestBluetoothPermissions.tsx import { useMutation, useQueryClient } from '@tanstack/react-query'; import { PERMISSIONS, requestMultiple } from 'react-native-permissions'; export const useRequestBluetoothPermissions = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: async () => { const res = await requestMultiple([ PERMISSIONS.ANDROID.BLUETOOTH_CONNECT, PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION, PERMISSIONS.ANDROID.BLUETOOTH_SCAN, PERMISSIONS.IOS.BLUETOOTH, ]); await queryClient.invalidateQueries({ queryKey: ['bluetoothPermissions'] }); return res; }, }); }; < /code> компонент с кнопкой разрешения < /h3> // BluetoothStatusFlow.tsx import { useCallback, useMemo } from 'react'; import { Platform } from 'react-native'; import { openSettings } from 'react-native-permissions'; const onRequestPermissions = useCallback(async () => { const result = await requestBluetoothPermissions(); const permissionsDenied = result && Object.values(result).some(status => status === 'denied' || status === 'blocked' ); if (didUserBlock || permissionsDenied) { if (Platform.OS === 'android') { try { await openAppSettings(); // Custom native method } catch (error) { openSettings(); // react-native-permissions fallback } } else { openSettings(); } } }, [didUserBlock, requestBluetoothPermissions]); {didUserBlock ? 'Open Settings' : 'Give Permissions'} < /code> Что я попробовал < /h2> 1. Пользовательский нативный метод Android < /h3> Добавлен собственный метод для непосредственного открытия настройки приложения: < /p> // TuyaActivatorModule.kt @ReactMethod fun openAppSettings(params: ReadableMap) { val currentActivity = currentActivity ?: return try { val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) intent.data = Uri.parse("package:" + reactApplicationContext.packageName) currentActivity.startActivity(intent) } catch (e: Exception) { // Fallback to general settings currentActivity.startActivity(Intent(Settings.ACTION_SETTINGS)) } } < /code> 2. AndroidManifest.xml разрешения < /h3> < /code> 3. Пробовал разные библиотеки < /h3> react-native-permissions - немедленно возвращается со статусом отрицания
Код: Выделить всё
react-native-android-open-settings< /code> - та же проблема < /li> Пользовательская нативная реализация - та же проблема < /li> < /ul> ожидаемое поведение < /h2> Пользователь Clicks «Grant Remissions» < /li> System Показывает Dialog или Opens App Setres < /li> Разрешения < /li> Приложение обнаруживает изменения разрешения < /li> < /ol> фактическое поведение на huawei vog -l29 < /h2> Кнопка кликов пользователя < /li> [b] < /rough> - нет диалога, natual, li> < /strong> - нет диарода, li> < /strong> - нет диалога.requestBluetoothPermissions() - вызовы успешно, но не навигация нигде
Код: Выделить всё
openSettings() - Пользователь застрял - не может предоставить разрешения через приложение
- Рекомендации Bluetooth mysible [/b] в приложения Разрешения) Устройства
это известное ограничение emui с диалогами с разрешением, подавляемым? /> Как я могу надежно открыть настройки приложения на устройствах Huawei?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -l29-reque