1

J'utilise Android pour activer mon application S Voice dans Android. Comme les travaux antérieurs, je vais utiliser le suit code pour activer ceComment déterminer/obtenir le bon paquet S Voice dans 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(); 
} 

Le code ci-dessus a bien fonctionné dans Galaxy S4 avec Android 5.0. Cependant, le problème vient des premières et deuxièmes lignes dans Galaxy S7 avec Android 6.0. Dans S7 Galaxy avec Android 6.0, les première et deuxième lignes doivent modifier comme

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

Et aussi le nom de l'application S voix à l'évolution de la "S Voice" à "S App Voice". Ce changement me donne un travail difficile. Par conséquent, je veux déterminer l'application S Voice dans mon téléphone avant de décider de ces appels. Actuellement, je ne sais pas le changement est de la version Android ou l'appareil. Pourriez-vous avoir une idée d'adapter le problème dans différents téléphones: S4 et S7?

+0

Pourriez-vous vérifier simplement quel paquet est installé avant d'envoyer l'intention? – brandall

+0

En fait, j'ai juste une entrée est "ouvrir S Voice", puis l'application doit activer l'application S Voice. Ainsi, nous ne pouvons pas vérifier le nom du paquet manuellement. – Jame

+0

L'entrée pourrait être «saucisses», il ne restreint pas le code que vous écrivez une fois que vous le détecter ....? – brandall

Répondre

1

Lors de l'ouverture des applications, il peut y avoir des différences de nom de package ou d'application. Voici une méthode utilitaire standard pour vérifier:

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

Vous devez supprimer mon journalisation personnalisé.