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

关于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。
有没有大佬帮忙看一下,有任何可能的原因都请说一下,或者有更好的源码教程也请分享一下。
在这里先谢谢了。

在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);
    }
}

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