Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android正在忽略录制音频权限和语音API实现_Android_Android Speech Api - Fatal编程技术网

Android正在忽略录制音频权限和语音API实现

Android正在忽略录制音频权限和语音API实现,android,android-speech-api,Android,Android Speech Api,我正试图让语音识别在我的Android 2.3.3应用程序中工作,但缺少一些基本的东西 首先,在我的AndroidManifest.xml文件的顶部,我有: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myuser.myapp"> <use

我正试图让语音识别在我的Android 2.3.3应用程序中工作,但缺少一些基本的东西

首先,在我的
AndroidManifest.xml
文件的顶部,我有:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myuser.myapp">
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"

        ... remainder omitted for brevity
我在三星Galaxy S7 Edge上运行应用程序,方法是将手机连接到笔记本电脑(通过USB),单击Android Studio中的运行(应用程序)按钮,然后选择我的手机作为连接设备

当应用程序在我的手机上启动时,我注意到的第一件事是,它不会提示我接受/拒绝应用程序使用麦克风的许可。这对我来说是一个预警信号,表明某些地方出了问题

但是,当我导航到
SpeechActivity/activity\u speech.xml
屏幕时,我得到:

运行时,我得到:

FATAL EXCEPTION: main
Process: com.example.myuser.myapp, PID: 9585
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myuser.myapp/com.example.myuser.myapp.SpeechActivity}: java.lang.RuntimeException: Ya can't do that now, ya here.
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2947)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3008)
   at android.app.ActivityThread.-wrap14(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6688)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: java.lang.RuntimeException: Ya can't do that now, ya here.
   at com.example.myuser.myapp.SpeechActivity.onCreate(SpeechActivity.java:43)
   at android.app.Activity.performCreate(Activity.java:6912)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2900)
我是否可能需要下载并安装一个插件或APK才能让语音识别工作?为什么我的应用程序没有获得使用手机麦克风的许可?语音识别器是如何启动/侦听的,但之后似乎根本无法识别任何语音的?

根据,这是一种危险的许可。您应该向用户请求它

录制音频:允许应用程序录制音频

防护等级:危险

常量值:“android.permission.RECORD_AUDIO”

简单地说,您可以使用以下命令检查您的应用程序是否具有此权限

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
    Manifest.permission.RECORD_AUDIO);

if (permissionCheck == PERMISSION_GRANTED) {
    // you have the permission, proceed to record audio

    speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
    speechRecognizer.setRecognitionListener(this);

    Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    speechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "voice.recognition.test");
    speechIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
    speechRecognizer.startListening(speechIntent);
    Log.i("SpeechActivity", "Speech Recognizer is listening");

} 
else {

    // you don't have permission, try requesting for it

    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.RECORD_AUDIO},
            MY_PERMISSION_REQUEST_RECORD_AUDIO);
}
慢慢来,阅读Android指南上的指南。

根据,这是一个危险的许可。您应该向用户请求它

录制音频:允许应用程序录制音频

防护等级:危险

常量值:“android.permission.RECORD_AUDIO”

简单地说,您可以使用以下命令检查您的应用程序是否具有此权限

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
    Manifest.permission.RECORD_AUDIO);

if (permissionCheck == PERMISSION_GRANTED) {
    // you have the permission, proceed to record audio

    speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
    speechRecognizer.setRecognitionListener(this);

    Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    speechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "voice.recognition.test");
    speechIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
    speechRecognizer.startListening(speechIntent);
    Log.i("SpeechActivity", "Speech Recognizer is listening");

} 
else {

    // you don't have permission, try requesting for it

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

慢慢来,阅读Android指南上的指南。

在清单中声明权限是在Mashmallow之前要做的事情,因为那时你需要通过权限请求用户权限,权限将在屏幕上显示提示。你应该检查这个链接:三星Galaxy S7 Edge与Android 2.3.3,真的吗?是的@rupinderjeet为什么2.3.3在我的特定设备上有问题?根据你的说法,2.3.3是什么,是GINGER_BREAD吗?这正是我去Android Studio>>关于Android Studio时告诉我的。它说:“Android Studio 2.3.3构建#AI-162.4069837,构建于2017年6月6日。”在清单中声明权限是在Mashmallow之前要做的事情,因为那时你需要通过权限请求用户权限,权限将在屏幕上显示提示。你应该检查这个链接:三星Galaxy S7 Edge与Android 2.3.3,真的吗?是的@rupinderjeet为什么2.3.3在我的特定设备上有问题?根据你的说法,2.3.3是什么,是GINGER_BREAD吗?这正是我去Android Studio>>关于Android Studio时告诉我的。上面写着:“Android Studio 2.3.3构建#AI-162.4069837,构建于2017年6月6日。”谢谢@rupinderjeet(+1;我还修改了我之前的评论,因为你的修订答案更符合我的问题解决方式!)。请查看我的编辑,我添加了建议的权限检查,现在当我导航到
SpeechActivity
,抛出异常(“你不能那样做…”)时,我的应用程序死亡。此外,它仍然没有促使我批准使用麦克风。有什么想法吗?它会抛出异常,因为你没有权限。我编辑了我的答案,告诉你如何申请权限。另外,请注意我回答的最后一行谢谢@rupinderjeet(+1)-如果有帮助的话,我添加了stacktrace。你为什么说我没有权限?我不应该在某个时候被提示获得许可吗?如果你不请求许可,你就不会被提示。你应该读我答案底部的那篇文章。您在清单中声明了权限。当你需要它时,你会要求它。用户决定接受或拒绝它。Android本身对你没有帮助。我希望可以,但不是。“危险权限可以让应用程序访问用户的机密数据。如果你的应用程序在其清单中列出了正常权限,系统会自动授予该权限。如果你列出了危险权限,用户必须显式批准你的应用程序。”。。。那我还缺什么?!?!我在我的舱单上声明允许。我正在检查代码中的权限(请参见上面的更改)。然而,在ap运行时,我仍然没有被要求给予明确的批准/许可。谢谢@rupinderjeet(+1;我还修改了我之前的评论,因为你修改后的答案与解决我的问题更加一致!)。请查看我的编辑,我添加了建议的权限检查,现在当我导航到
SpeechActivity
,抛出异常(“你不能那样做…”)时,我的应用程序死亡。此外,它仍然没有促使我批准使用麦克风。有什么想法吗?它会抛出异常,因为你没有权限。我编辑了我的答案,告诉你如何申请权限。另外,请注意我回答的最后一行谢谢@rupinderjeet(+1)-如果有帮助的话,我添加了stacktrace。你为什么说我没有权限?我不应该在某个时候被提示获得许可吗?如果你不请求许可,你就不会被提示。你应该读我答案底部的那篇文章。您在清单中声明了权限。当你需要它时,你会要求它。用户决定接受或拒绝它。Android本身对你没有帮助。我希望可以,但不是。“危险权限可以让应用程序访问用户的机密数据。如果你的应用程序在其清单中列出了正常权限,系统会自动授予该权限。如果你列出了危险权限,用户必须显式批准你的应用程序。”。。。那我还缺什么?!?!我在我的舱单上声明允许。我正在检查代码中的权限(请参见上面的更改)。然而,我仍然没有被要求在ap运行时给予明确的批准/许可。