无法访问麦克风的权限

时间:2020-11-03 02:03:37

标签: android reactjs react-native permissions microphone

我正在尝试使用react-native-live-audio-stream库。但是,在麦克风的许可下,我出现了错误。

我正在关注this exact link的设置方法。

这是我的录音机组件:

import React from 'react';
import {TouchableOpacity, View} from 'react-native';
import LiveAudioStream from 'react-native-live-audio-stream';

export default function Recorder() {
  const options = {
    sampleRate: 32000, // default is 44100 but 32000 is adequate for accurate voice recognition
    channels: 1, // 1 or 2, default 1
    bitsPerSample: 16, // 8 or 16, default 16
    audioSource: 6, // android only (see below)
  };
  LiveAudioStream.init(options);
  LiveAudioStream.on('data', (data) => {
    // base64-encoded audio data chunks
  });

  return (
    <View>
      <TouchableOpacity onClick={LiveAudioStream.start()}>
        <Text>Start recording!</Text>
      </TouchableOpacity>
    </View>
  );
}

我得到的错误是:

startRecording() called on an uninitialized AudioRecord.

所以我开始研究许可问题……这是我到目前为止所得到的:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="Manifest.permission.RECORD_AUDIO"/>

在AndroidManifest.xml中

通过添加对麦克风的请求,如下所示:

const requestMicrophone = async () =>{
  if (ContextCompat.checkSelfPermission(getActivity(),
    Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {

  ActivityCompat.requestPermissions(getActivity(),
      new String[]{Manifest.permission.RECORD_AUDIO},
      REQUEST_MICROPHONE);
}

我收到以下错误:

[![ActivityCompat.requestPermissions(getActivity(),new String\[\]{Manifest.permission.RECORD_AUDIO}, 

REQUEST_MICROPHONE] 2] 2

关于如何解决此问题的任何想法?

编辑: 我已修正错误!记录器中与音频有关的事物需要放入一个功能,该功能通过开始记录来调用。

2 个答案:

答案 0 :(得分:0)

尝试以下代码以在android中获得许可:

import {PermissionsAndroid, Platform} from 'react-native';
.....
const requestMicrophone = async () => { //replace your function with this code.
            if (Platform.OS === 'android') {
                try {
                  const granted = await PermissionsAndroid.request(
                    PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
                    {
                      title: 'Permissions for record audio',
                      message: 'Give permission to your device to record audio',
                      buttonPositive: 'ok',
                    },
                  );
                  if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                    console.log('permission granted');
                  } else {
                    console.log('permission denied');
                    return;
                  }
                } catch (err) {
                  console.warn(err);
                  return;
                }
              }
        }

答案 1 :(得分:0)

首先,您使用的是onClick event,它的react事件不是本机的反应,应该切换到onPress event,并且每次使用LiveAudioStream.start()来调用start()的每个渲染

<View>
    <TouchableOpacity onClick={LiveAudioStream.start()}>
      <Text>Start recording!</Text>
    </TouchableOpacity>
</View>

//edited
<View>
    <TouchableOpacity onPress={()=>LiveAudioStream.start}>
      <Text>Start recording!</Text>
    </TouchableOpacity>
</View>```