Как определить / получить правильный пакет S Voice в Android

1

Я использую Android для включения моего приложения S Voice в Android. Как и в предыдущей работе, я буду использовать следующий код, чтобы включить его

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

Приведенный выше код хорошо зарекомендовал себя в Galaxy S4 с Android 5.0. Однако проблема исходит от первой и второй строк в Galaxy S7 с Android 6.0. В Galaxy S7 с Android 6.0 первая и вторая строки должны быть изменены как

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

А также имя приложения S Voice с изменением "S Voice" на "S Voice App". Это изменение дает мне трудную работу. Следовательно, я хочу определить приложение S Voice в своем телефоне, прежде чем решать эти функции. В настоящее время я не знаю, что изменение происходит от версии Android или устройства. Не могли бы вы придумать, как адаптировать проблему на разных телефонах: S4 и S7?

  • 0
    Не могли бы вы просто проверить, какой пакет установлен перед отправкой намерения?
  • 0
    На самом деле, у меня есть только один вход "open S Voice", затем приложение должно включить приложение S Voice. Таким образом, мы не можем проверить имя пакета вручную.
Показать ещё 4 комментария
Теги:
android-6.0-marshmallow
android-5.0-lollipop

1 ответ

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

Вам нужно будет удалить свое собственное ведение журнала.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню