关于Android Studio使用google api语音识别的应用
问题描述:
我在youtube上找了一个speech to text的教程,在模拟机上运行会跳过录音部分,
直接显示“try again”,在华为荣耀8实机运行会catch到ActivityNotFoundException。
实机会在点击button后显示"intent problem"。
这边我有加上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);
}
}
答
楼上说的对,一点一点调吧,