jnius.jnius.JavaException:发生 JVM 异常:setAudioSource 失败

Posted

技术标签:

【中文标题】jnius.jnius.JavaException:发生 JVM 异常:setAudioSource 失败【英文标题】:jnius.jnius.JavaException: JVM exception occurred: setAudioSource failed 【发布时间】:2021-04-12 06:51:41 【问题描述】:

由于PyAudioandroid不兼容,尝试在python中使用jnius以下代码:

    if platform == 'android':
        from android.permissions import request_permissions, Permission

        request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE,
                             Permission.INTERNET, Permission.RECORD_AUDIO,
                             Permission.CAPTURE_AUDIO_OUTPUT])

        # get the needed Java classes
        self.MediaRecorder = autoclass('android.media.MediaRecorder')
        self.Audiosource = autoclass('android.media.MediaRecorder$AudioSource')
        self.OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat')
        self.AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder')
        #String = autoclass("java.lang.String")

        # create out recorder
        self.mRecorder = self.MediaRecorder()
        self.mRecorder.setAudioSource(self.AudioSource.MIC)
        self.mRecorder.setOutputFormat(self.OutputFormat.MPEG_4)
        self.mRecorder.setOutputFile('/sdcard/test_recording.mp4')
        self.mRecorder.setAudioEncoder(self.AudioEncoder.AMR_NB)
        self.mRecorder.prepare()

但是当应用程序尝试加载时出现异常

jnius.jnius.JavaException: JVM exception occurred: setAudioSource failed

应用程序崩溃。 从代码中可以看出,我尝试授予所有权限。当应用程序加载时,它会请求媒体权限,而不会请求麦克风权限。

我检查了麦克风的设置,但令人惊讶的是,我的应用程序甚至没有列出启用(可能是因为安装源不是 Playstore)。

我该如何克服这个问题?任何帮助表示赞赏。

此外,问题的根本原因是录制音频的权限被拒绝。这发生在我请求 RECORD_AUDIO 权限时。

01-07 14:08:41.497 1417 1834 D 兼容性信息:applicationScale - 1.0 01-07 14:08:41.499 2331 2693 I ProcessMonitor: onForegroundInfoChanged: ForegroundInfomForegroundPackageName='com.google.android.packageinstaller', mForegroundUid=10023, mForegroundPid=2558, mLastForegroundPackageName='jigyasu.net.voiceasstmob', mLastForegroundUid=1 , mLastForegroundPid=4691, mMultiWindowForegroundPackageName='null', mMultiWindowForegroundUid=-1, mFlags=0 01-07 14:08:41.499 2331 2693 I GameBoosterService: onForegroundInfoChanged: Cur=com.google.android.packageinstaller last=jigyasu.net.voiceasstmob 01-07 14:08:41.499 794 18980 W ServiceManager:权限失败:来自 uid=10197 pid=4691 的 android.permission.RECORD_AUDIO 01-07 14:08:41.500 794 18980 E MediaRecorderService:请求需要 android.permission.RECORD_AUDIO 01-07 14:08:41.500 2331 2693 D GameBoosterService: onGameStatusChange 前景:ForegroundInfomForegroundPackageName='com.google.android.packageinstaller', mForegroundUid=10023, mForegroundPid=2558, mLastForegroundPackageName='jigyasu.net.voiceasstmob', mLastForegroundUid= 10197,mLastForegroundPid=4691,mMultiWindowForegroundPackageName='null',mMultiWindowForegroundUid=-1,mFlags=0 01-07 14:08:41.500 2331 2693 I GameBoosterService: onForegroundInfoChanged: Exit 01-07 14:08:41.500 2331 2693 I VideoBoxUtils: isSupportVideoBox: false 01-07 14:08:41.501 2331 2693 I VideoToolBoxService:onForegroundInfoChanged:退出 Vtb 01-07 14:08:41.503 4691 4714 I python:回溯(最近一次通话最后一次):

有趣的是,我没有在手机的麦克风权限下找到我的应用程序,这意味着我也无法手动授予权限。 该应用程序是否存在一些根本问题?

【问题讨论】:

【参考方案1】:

如果将来有人面临同样的问题,我找到了答案: 在您的规范文件中提及 RECORD_AUDIO 的权限。虽然可以通过代码询问存储权限,但必须在规范文件中提及 MICROPHONE 权限

【讨论】:

以上是关于jnius.jnius.JavaException:发生 JVM 异常:setAudioSource 失败的主要内容,如果未能解决你的问题,请参考以下文章