Как запросить разрешение камеры при нажатии кнопки в ответ?

РЕШЕНО!: Проверьте один ответ ниже. Это решает это. Но после того, как вы разрешите камеру, когда вы снова нажмете кнопку, она больше не будет запрашивать, что естественно. Вы должны снова запретить камеру из эмулятора или настроек телефона, чтобы она снова запросила.

Я в основном пытаюсь сделать это: кнопка при нажатии; он запросит у пользователя разрешение камеры в ответ. В моем текущем приложении он запрашивает при первом запуске приложения. Я пробовал разные способы реализовать это с помощью кнопки, но безрезультатно. Но этот код работает без ошибок. Вот мой app.js:

import React, {Component} from 'react'
import {StyleSheet, View, Text, Button} from 'react-native'
import {Permission, PERMISSION_TYPE} from 'D:/Reactdeneme/reacttest/src/AppPermission'

export default class App extends Component {
  componentDidMount() {

    Permission.checkPermission(PERMISSION_TYPE.camera)
//this the thing that prompts the camera permission. I want this in a button.
  }
render() {
  return (
    <View style = {styles.container}>
    <Text style = {{fontSize: 30}}>izinler</Text>
    </View>
    )
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center'
  }
})

ЭТА ЧАСТЬ, ВОЗМОЖНО, НЕОБЯЗАТЕЛЬНА, поэтому, пожалуйста, не бойтесь длинных блоков кода. Вот мой AppPermissions.js:

import {check, request, PERMISSIONS, RESULTS} from 'react-native-permissions';
import {Platform} from 'react-native'

const PLATFORM_CAMERA_PERMISSIONS= {
    ios:PERMISSIONS.IOS.MICROPHONE,
    android: PERMISSIONS.ANDROID.CAMERA
}


const REQUEST_PERMISSION_TYPE = {
    camera: PLATFORM_CAMERA_PERMISSIONS
}

const PERMISSION_TYPE= {
    camera: 'camera'
}

class AppPermission {

    checkPermission= async (type): Promise<boolean> => {
        console.info("AppPermission checkPermission type:", type)
        const permissions = REQUEST_PERMISSION_TYPE[type][Platform.OS]
        console.info("AppPermission checkPermission permissions:", permissions)
        if (!permissions){
            return true
        }
        try {
        const result = await check(permissions)
        console.info("AppPermission checkPermission result:", result)
        if (result === RESULTS.GRANTED) return true
        return this.requestPermission(permissions)
        } catch (error) {
            console.info("AppPermission checkPermission error:", error)
            return false
        }
    }

    requestPermission=async(permissions): Promise<boolean> => {
        console.info("AppPermission requestPermission permissions:", permissions)

try {
    const result = await request(permissions)
    console.info("AppPermission requestPermission result:", result)
    return result === RESULTS.GRANTED
}catch(error) {
    console.info("AppPermission requestPermission error:", error)

    return false
}

    }
}

const Permission = new AppPermission()
export {Permission, PERMISSION_TYPE}

1
4 030
1

Ответ:

Решено

Вы должны читать больше реактивных документов. Удалите checkPermission в componentDidMount и добавьте это в свойства кнопки onPress.

import React, {Component} from 'react'
import {StyleSheet, View, Text, Button} from 'react-native'
import {Permission, PERMISSION_TYPE} from 'D:/Reactdeneme/reacttest/src/AppPermission'

export default class App extends Component {
    checkPermission = () => {
        Permission.checkPermission(PERMISSION_TYPE.camera);
    }

    render() {
        return (
            <View style = {styles.container}>
                <Text style = {{fontSize: 30}}>izinler</Text>
                <Button title = "Check" onPress = {this.checkPermission}/>
            </View>
        )
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center'
    }
})