React Native: Запрос на разрешение Bluetooth не работает на Huawei Vog -L29 - requestPermissions не показывает диалога, Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 React Native: Запрос на разрешение Bluetooth не работает на Huawei Vog -L29 - requestPermissions не показывает диалога,

Сообщение Anonymous »

React Native: запрос на разрешение Bluetooth, не работающий над Huawei Vog -L29 - requestPermissions не показывает диалога, opensettings () ничего не делает
Задача Описание
У меня есть нативное приложение, которое требует прочиков 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>

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

      // 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
      - opensettings () ничего не делает
    • Код: Выделить всё

      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
Ответить

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

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

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

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

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