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



由于PyAudio与android不兼容,尝试在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.001-07 14:08:41.499 2331 2693 I ProcessMonitor:onForegroundInfoChanged:ForegroundInfo{mForegroundPackageName='com.google.android.packageinstaller',mForegroundUid=10023,mForegroundPid=2558,mLastForegroundPackageName:'jigyasu.net.woiceasstmob',mLastForegroundUid=10197,mLastForegroundPid=4691,mMultiWindowForegroundPackageName='ull',mMultiWindowsForegroundUd=-1,mFlags=0}01-07 14:08:41.499 2331 2693 I GameBoosterService:onForegroundInfoChanged:Cur=com.google.android.packageinstaller last=jigyasu.net.voiasstmob01-07 14:08:41.499 794 18980 W ServiceManager:权限失败:android.Permission.RECORD_AUDIO from uid=10197 pid=469101-07 14:08:41.500 794 18980 E媒体记录器服务:请求需要android.permission.RECORD_AUDIO01-07 14:08:41.500 2331 2693 D GameBoosterService:onGameStatusChange ForegroundInfo{mForegroundPackageName='com.google.android.packageinstaller',mForegroundUid=10023,mForegroundPid=2558,mLastForegroundPackageName:'jigyasu.net.voiasstmob',mLastForegroundUid=10197,mLastForgroundPid=4691,mMultiWindowForegroundPackageName='ull',mMultiWindowsForegroundUd=-1,mFlags=0}01-07 14:08:41.500 2331 2693 I GameBoosterService:onForegroundInfoChanged:退出01-07 14:08:41.500 2331 2693 I VideoBoxUtils:isSupportVideoBox:false01-07 14:08:41.501 2331 2693 I视频工具箱服务:onForegroundInfoChanged:退出Vtb01-07 14:08:41.503 4691 4714 I python:Traceback(最后一次调用(:

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

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

最新更新