tianyizhang0315 2018-03-13 01:21 采纳率: 50%
浏览 2827
已采纳

关于Android Studio使用google api语音识别的应用

我在youtube上找了一个speech to text的教程,在模拟机上运行会跳过录音部分,
直接显示“try again”,在华为荣耀8实机运行会catch到ActivityNotFoundException。
模拟机
实机会在点击button后显示"intent problem"。
MainActivity.java
AndroidManifest.xml
这边我有加上internet 和 audio record的permission。
有朋友说google api 在build.gradle里compile一下就可以了,我也没有找到对应的api。
有没有大佬帮忙看一下,有任何可能的原因都请说一下,或者有更好的源码教程也请分享一下。
在这里先谢谢了。

  • 写回答

2条回答 默认 最新

  • jhgjdfhre 2018-03-13 02:56
    关注

    在6.0以前的系统,都是权限一刀切的处理方式,只要用户安装,Manifest申请的权限都会被赋予,并且安装后权限也撤销不了。

    Android 6.0 采用新的权限模型,只有在需要权限的时候,才告知用户是否授权;是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权限申请。

    可以参考 https://www.cnblogs.com/whycxb/p/6818685.html

    speech to text 需要权限 android.permission.RECORD_AUDIO

    private static final int REQUEST_AUDIO = 0;

            @Override
            public void onClick(View v) {
                            // 在源文件的此处添加下列代码
                if (Build.VERSION.SDK_INT >= 23) {
                    if (checkSelfPermission(Manifest.permission.RECORD_AUDIO)
                            != PackageManager.PERMISSION_GRANTED) {
                        {
                            // BEGIN_INCLUDE(camera_permission_request)
                            if (shouldShowRequestPermissionRationale(android.Manifest.permission.RECORD_AUDIO)) {
                                showMessageOKCancel("You need to allow access to Contacts",
                                        new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(DialogInterface dialog, int which) {
                                                requestPermissions(
                                                        new String[]{Manifest.permission.RECORD_AUDIO},
                                                        REQUEST_AUDIO);
                                            }
                                        });
                            } else {
                                //这里就会弹出对话框
                                requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_AUDIO);
                            }
    
                        }
                    }
                }
    
    // 这是自定义选择权限对话框,会弹出来让你选择启动还是拒绝
    private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
        new AlertDialog.Builder(this)
                .setMessage(message)
                .setPositiveButton("OK", okListener)
                .setNegativeButton("Cancel", null)
                .create()
                .show();
    }
    
        // 选择权限后的回调
        @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case REQUEST_AUDIO:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(this,
                            "AUDIO Permited!",
                            Toast.LENGTH_SHORT)
                            .show();
                } 
                break;            
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料