Реагируйте на родной Android: Всплывающее окно разрешения камеры не открывается на мобильном устройстве

#android #react-native

Вопрос:

Я использую react native для мобильной разработки. Мой вопрос в том, что всплывающее разрешение камеры не отображается на мобильном устройстве.

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

Мой AndroidManifest.xml :

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.xyz">

    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:allowBackup="false"
      android:requestLegacyExternalStorage="true"
      android:theme="@style/AppTheme">
      <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
    </application>
</manifest>
 

Мой собственный код реакции (взят из официального документа):

 const takePermissions = async() => {
    await PermissionsAndroid.request(
         PermissionsAndroid.PERMISSIONS.CAMERA,
         {
           title: "Cool Photo App Camera Permission",
           message:
             "Cool Photo App needs access to your camera "  
             "so you can take awesome pictures.",
             buttonNeutral: "Ask Me Later",
             buttonNegative: "Cancel",
             buttonPositive: "OK"
         }
    );
    }

...

    useEffect(() => {
        takePermissions();
    }, []);
 

Я не могу видеть всплывающее окно для разрешения камеры на своем мобильном устройстве.

ПРАВКА: Я заметил, что, как только мое приложение установлено на мобильном устройстве, оно уже автоматически получает разрешение камеры и хранилища. Из-за этого разрешения всплывающее окно не отображается, когда пользователь открывает приложение. Я попытался удалить разрешения на камеру и хранение в AndroidManifest.xml и попробовал еще раз — но, к сожалению, столкнулся с тем же поведением — разрешение на камеру и хранение уже предоставлено в настройках приложения, и поэтому всплывающее диалоговое окно разрешения не отображается. Как это исправить?

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

Как автоматически предоставляются разрешения на камеру и хранение в настройках приложения? Даже если я удалю и переустановлю?

Комментарии:

1. Каков результат запроса()? Пользователь мог отказать вам в разрешении. Вы можете ожидать несколько возможных результатов от запроса, а именно: GRANTED DENIED NEVER_ASK_AGAIN

2. @TommyLeong. его GRANTED . Также, пожалуйста, ознакомьтесь с разделом РЕДАКТИРОВАНИЯ в приведенном выше вопросе, который я только что добавил.

3. Если у вашего приложения уже есть разрешение камеры, не могли бы вы просто перейти дальше, чтобы использовать функцию камеры? Вам не следует снова показывать этот диалог. Предлагаю вам удалить приложение и переустановить его снова, чтобы проверить, отображается ли диалоговое окно разрешений в первый раз.

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