【问题标题】:How to determine/get correct S Voice packet in Android如何在 Android 中确定/获取正确的 S Voice 数据包
【发布时间】:2016-10-31 10:44:18
【问题描述】:

我正在使用 Android 在 Android 中打开我的 S Voice 应用程序。和之前的工作一样,我会使用下面的代码来开启它

String SVOICE_PACKAGE_NAME = "com.vlingo.midas";
String SVOICE_LISTEN_ACTION = "com.sec.action.SVOICE";
Intent intent = new Intent();
intent.setPackage(SVOICE_PACKAGE_NAME);
intent.setAction(SVOICE_LISTEN_ACTION);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
    getApplication().startActivity(intent);
} catch (final ActivityNotFoundException e) {
    e.printStackTrace();
} catch (final Exception e) {
    e.printStackTrace();
}

以上代码在装有 Android 5.0 的 Galaxy S4 中运行良好。然而,问题来自于搭载 Android 6.0 的 Galaxy S7 的第一行和第二行。在Android 6.0的Galaxy S7中,第一行和第二行必须修改为

SVOICE_PACKAGE_NAME = "com.samsung.voiceserviceplatform";
SVOICE_LISTEN_ACTION = "com.sec.action.SVOICE";

还有应用程序名称 S Voice 从“S Voice”更改为“S Voice App”。这种变化给了我一项艰巨的工作。因此,在决定调用这些功能之前,我想确定我手机中的 S Voice App。目前,我不知道变化是来自Android版本还是设备。你有什么想法可以在各种手机中适应这个问题:S4 和 S7?

【问题讨论】:

  • 在发送 Intent 之前,您不能只检查安装了哪个包吗?
  • 其实我只有一个输入是“打开S Voice”,然后应用程序必须打开S Voice应用程序。因此,我们无法手动检查包名。
  • 输入可能是“香肠”,一旦检测到它就不会限制您编写的代码......?
  • 对不起,我不明白。因为我的任务是打开 S Voice 应用。它必须在 S4 和 S7 中都可以工作。但是,它们的名称不同,因此很难处理
  • 在您的代码中,当您需要打开 S Voice 时,您的代码需要检查安装了哪个包(如果有的话)。然后,您在意图中使用正确的包名称....?

标签: android android-5.0-lollipop android-6.0-marshmallow


【解决方案1】:

无论何时打开应用程序,都可能存在程序包或应用程序名称差异。这是一个标准的实用方法来检查:

/**
 * Check if the user has a package installed
 *
 * @param ctx         the application context
 * @param packageName the application package name
 * @return true if the package is installed
 */
public static boolean isPackageInstalled(@NonNull final Context ctx, @NonNull final String packageName) {
    if (DEBUG) {
        MyLog.i(CLS_NAME, "isPackageInstalled");
    }

    try {
        ctx.getApplicationContext().getPackageManager().getApplicationInfo(packageName, 0);
        return true;
    } catch (final PackageManager.NameNotFoundException e) {
        if (DEBUG) {
            MyLog.w(CLS_NAME, "isPackageInstalled: NameNotFoundException");
        }
    } catch (final NullPointerException e) {
        if (DEBUG) {
            MyLog.w(CLS_NAME, "isPackageInstalled: NullPointerException");
        }
    } catch (final Exception e) {
        if (DEBUG) {
            MyLog.w(CLS_NAME, "isPackageInstalled: Exception");
        }
    }

    return false;
}

您需要删除我的自定义日志记录。

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 2016-12-18
    • 2022-01-20
    • 2021-09-16
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2011-09-04
    相关资源
    最近更新 更多