【问题标题】:Cannot access permission to microphone无法访问麦克风权限
【发布时间】:2020-11-03 02:03:37
【问题描述】:

我正在尝试使用 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

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

编辑: 我修复了错误!录音机中与音频相关的东西需要放在一个函数中,通过开始录音来调用。

【问题讨论】:

    标签: android reactjs react-native permissions microphone


    【解决方案1】:

    尝试使用此代码在 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;
                    }
                  }
            }
    

    【讨论】:

    • 我仍然收到“在未初始化的 AudioRecord 上调用的 startRecording()”。错误。
    • 不要使用 onClick 事件。将 onClick 替换为:onPress={()=>LiveAudioStream.start()}
    【解决方案2】:

    首先你使用onClick event它的反应事件不是反应原生你应该切换到onPress event,你也使用start()在每次渲染中调用LiveAudioStream.start()

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多