Получение E / android.media.AudioRecord: разрешение пользователя запрещено! в телефоне Samsung S8 - PullRequest
0 голосов
/ 03 мая 2018

Получение

E / android.media.AudioRecord: разрешение пользователя запрещено!

Ошибка возникает в Samsung S8 под управлением Android 7.0.0. Тем не менее, эта ошибка не наблюдается в Moto G3 (Android версии 7.1.1) и один плюс 3 (версия для Android 8.0.0). Я пробовал в телефонах Samsung с версиями 7.1.1 (в этом также появилась та же ошибка.) Целевая версия SDK составляет 25

журналы ниже:

W/IPA-Native-W: data received from IPA is NULL! is it ok?
D/IpaCoreSdkAdapter: ipaMessageEventType= START_RECO
E/android.media.AudioRecord: User permission denied!
D/IpaAndroidAudioManagerFacade: startRecording AudioRecord
D/IPA-Native-I: [IPAStateKeyword::onEntry] publish PLAY_BEEP
W/IPA-Native-W: data received from IPA is NULL! is it ok?
D/IpaCoreSdkAdapter: ipaMessageEventType= PLAY_BEEP
D/IpaAndroidAudioManagerFacade: VOLUME play start + originalVolume=12
D/IpaAndroidAudioManagerFacade: VOLUME play start + streamVolume=7
I/AudioTrack: Skip ramp
D/IpaAndroidAudioManagerFacade: VOLUME play end + originalVolume=12
D/IpaAndroidAudioManagerFacade: VOLUME play end + streamVolume=12
D/IntentGenerator: sendK2KnobIntent patype->5 state-> 1
D/IntentGenerator: Complete sendK2KnobIntent patype->5 state-> 1
D/IPA-Native-I: [IPAStateKeyword::onEntry] Generating internal event...

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Запуск метода startRecording() класса AudioRecord с некоторой задержкой после создания экземпляра Audiorecord:

        public void start() {
        // Stop recording if it is currently ongoing.
                stop();
                // Try to create a new recording session.
                mAudioRecord = createAudioRecord();
                CommonMethods.printLog(TAG, mAudioRecord.toString());
                if (mAudioRecord == null) {
                    throw new RuntimeException("Cannot instantiate VoiceRecorder");
                }
                // Start recording.

                if (getDeviceManufacturer().contains("samsung")) {
                    new Handler(Looper.getMainLooper()).post(new Runnable() {
                        @Override
                        public void run() {
                            new CountDownTimer(100, 50) {
                                @Override
                                public void onTick(long millisUntilFinished) {

                                }

                                @Override
                                public void onFinish() {
                                    mAudioRecord.startRecording();
                                    // Start processing the captured audio.
                                    mThread = new Thread(new ProcessVoice());
                                    mThread.start();
                                }
                            }.start();
                        }
                    });
                } 
            }

     private AudioRecord createAudioRecord() {
            for (int sampleRate : SAMPLE_RATE_CANDIDATES) {
                final int sizeInBytes = AudioRecord.getMinBufferSize(sampleRate, CHANNEL, ENCODING);
                if (sizeInBytes == AudioRecord.ERROR_BAD_VALUE) {
                    continue;
                }
                final AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                        sampleRate, CHANNEL, ENCODING, sizeInBytes);
                if (audioRecord.getState() == AudioRecord.STATE_INITIALIZED) {
                    mBuffer = new byte[sizeInBytes];
                    return audioRecord;
                } else {
                    audioRecord.release();
                }
            }
            return null;
        }

 private String getDeviceManufacturer() {
        String deviceManufacturer = android.os.Build.MANUFACTURER;
        return deviceManufacturer;
    }
0 голосов
/ 04 июля 2018

Использовать PermissionChecker.checkCallingOrSelfPermission это должно сделать работу.

if (PermissionChecker.checkCallingOrSelfPermission(this, Manifest.permission.RECORD_AUDIO)
            == PackageManager.PERMISSION_GRANTED) {

       //Start recognition

    } else if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.RECORD_AUDIO)) {

            // show permission dialog.
        showPermissionMessageDialog();
    } else {

         //Request permission.
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO},
                REQUEST_RECORD_AUDIO_PERMISSION);
    }
...