java–Oreo中的RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS

java–Oreo中的RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS,第1张

概述在大多数Android设备中,RecognitionService将由Google的原生“现在/助理”应用程序提供.在AndroidOreo之前,我能够使用以下简单代码查询GoogleRecognizer支持的语言:finalIntentvrIntent=newIntent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);//vrIntent.setPacka

在大多数Android设备中,RecognitionService将由Google的原生“现在/助理”应用程序提供.

在AndroID Oreo之前,我能够使用以下简单代码查询Google Recognizer支持的语言:

final Intent vrIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);// vrIntent.setPackage("com.Google.androID.GooglequicksearchBox");getContext().sendOrderedbroadcast(vrIntent, null, new broadcastReceiver() {    @OverrIDe    public voID onReceive(final Context context, final Intent intent) {                // final Bundle bundle = intent.getExtras();                final Bundle bundle = getResultExtras(true);                if (bundle != null) {                    if (bundle.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES)) {                        Log.i("TAG", "onReceive: EXTRA_SUPPORTED_LANGUAGES present");                        final ArrayList<String> vrStringLocales = bundle.getStringArrayList(                                RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);                        Log.i("TAG", "onReceive: EXTRA_SUPPORTED_LANGUAGES size: " + vrStringLocales.size());                    } else {                        Log.w("TAG", "onReceive: missing EXTRA_SUPPORTED_LANGUAGES");                    }                } else {                    Log.w("TAG", "onReceive: Bundle null");                }}, null, 1234, null, null);

但是,从8.0开始,响应中不再包含额外的RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES.

在我尝试将此文件作为错误提交之前,我想首先看看其他人是否可以复制 – 但是还要检查是否存在订单广播behavioural change in API 26我有点忽略了,这可能是导致这种情况的原因.

提前致谢.

解决方法:

因此,如果您没有设置包名,我无法复制,但可以进一步复制注释

vrIntent.setPackage("com.Google.androID.GooglequicksearchBox");

然后它失败了,否则一切正常.

这是我用来测试它的基本活动.

package it.versionestabile.stackover001;import androID.content.broadcastReceiver;import androID.content.Context;import androID.content.Intent;import androID.content.pm.PackageInfo;import androID.content.pm.PackageManager;import androID.speech.RecognizerIntent;import androID.support.v7.app.AppCompatActivity;import androID.os.Bundle;import androID.util.Log;import java.util.ArrayList;import static java.security.AccessController.getContext;/** * https://stackoverflow.com/questions/48500077/recognizerintent-action-get-language-details-in-oreo */public class MainActivity extends AppCompatActivity {    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        final Intent vrIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);        vrIntent.setPackage("com.Google.androID.GooglequicksearchBox");        PackageManager packageManager = getPackageManager();        for (PackageInfo packageInfo: packageManager.getInstalledPackages(0)) {            if (packageInfo.packagename.contains("com.Google.androID.GooglequicksearchBox"))                Log.d("AAA", packageInfo.packagename + ", "  + packageInfo.versionname);        }        this.sendOrderedbroadcast(vrIntent, null, new broadcastReceiver() {            @OverrIDe            public voID onReceive(final Context context, final Intent intent) {                // final Bundle bundle = intent.getExtras();                final Bundle bundle = getResultExtras(true);                if (bundle != null) {                    if (bundle.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES)) {                        Log.i("TAG", "onReceive: EXTRA_SUPPORTED_LANGUAGES present");                        final ArrayList<String> vrStringLocales = bundle.getStringArrayList(                                RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);                        Log.i("TAG", "onReceive: EXTRA_SUPPORTED_LANGUAGES size: " + vrStringLocales.size());                    } else {                        Log.w("TAG", "onReceive: missing EXTRA_SUPPORTED_LANGUAGES");                    }                } else {                    Log.w("TAG", "onReceive: Bundle null");                }            }            }, null, 1234, null, null);    }}

我已经在AndroID Studio 2.3和3.0.1以及使用API​​ 26和27的模拟器上测试了它.

一切正常,上面的代码.

但如果你注释掉这一行:

vrIntent.setPackage("com.Google.androID.GooglequicksearchBox");

在奥利奥它不起作用.

我仍然建议以这样的方式检查Google即时与包管理器的存在:

PackageManager packageManager = getPackageManager();

for (PackageInfo packageInfo: packageManager.getInstalledPackages(0)) {    if (packageInfo.packagename.contains("com.Google.androID.GooglequicksearchBox"))        Log.d("AAA", packageInfo.packagename + ", "  + packageInfo.versionname);// Todo - set a boolean value to discriminate the precence of Google Now}

为了确定您是否拥有正确的Google即时版本.

希望能帮助到你!

总结

以上是内存溢出为你收集整理的java – Oreo中的RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS全部内容,希望文章能够帮你解决java – Oreo中的RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1097594.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存