tianyizhang0315
tianyizhang0315
采纳率50%
2018-03-13 01:21 阅读 2.7k

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

20

我在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 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);
        }
    }
    
    点赞 评论 复制链接分享
  • morgerton 白萝卜blb 2018-03-13 10:03

    楼上说的对,一点一点调吧,

    点赞 评论 复制链接分享

相关推荐