'How to get default device assistance app in android by code?
my phone installed two voice searches: google app and S-voice app. The default app is S-voice app as figure bellow. My question is that how can we get the default voice application using programmingcally in Android 6.0. Thank you in advance
This is what I did
private boolean isMyAppLauncherDefault(String myPackageName) {
final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
filter.addCategory(Intent.CATEGORY_HOME);
List<IntentFilter> filters = new ArrayList<IntentFilter>();
filters.add(filter);
List<ComponentName> activities = new ArrayList<ComponentName>();
final PackageManager packageManager = (PackageManager) getPackageManager();
packageManager.getPreferredActivities(filters, activities, null);
for (ComponentName activity : activities) {
Log.d(TAG,"======packet default:==="+activity.getPackageName());
}
for (ComponentName activity : activities) {
if (myPackageName.equals(activity.getPackageName())) {
return true;
}
}
return false;
}
The above function is alway return true when my input is com.samsung.voiceserviceplatform. In other hands, the default app always returns com.google.android.googlequicksearchbox (indicates google voice)
Solution 1:[1]
Try this.
startActivity(new Intent(Intent.ACTION_VOICE_COMMAND).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
Solution 2:[2]
I try answer from Mattia Maestrini, it did work if returned component is an activity, like
ComponentInfo{com.sec.android.app.sbrowser/com.sec.android.app.sbrowser.SBrowserMainActivity}
but if the component is a service, I meet following problem
java.lang.SecurityException: Not allowed to start service Intent {
act=android.intent.action.ASSIST cmp=com.google.android.googlequicksearchbox/com.google.android.voiceinteraction.GsaVoiceInteractionService launchParam=MultiScreenLaunchParams { mDisplayId=0 mBaseDisplayId=0 mFlags=0 } } without permission android.permission.BIND_VOICE_INTERACTION
and I do add
<uses-permission android:name="android.permission.BIND_VOICE_INTERACTION"/>
in Manifest file.
At last I use method in Activity.java
public boolean showAssist(Bundle args)
It's added from Android M and it could start assistant service successfully.
Solution 3:[3]
If someone is seaching a quick kotlin version for that:
fun getCurrentlySelecetedDefaultAssistant(context: Context): ComponentName? =
Settings.Secure.getString(context.contentResolver, "assistant").let { assistantIdentifier ->
if (assistantIdentifier.isNotEmpty()) {
ComponentName.unflattenFromString(assistantIdentifier)
} else {
null
}
}
Thanks to: https://stackoverflow.com/a/40566276/371749 Just re-written.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | AndroidHacker |
| Solution 2 | |
| Solution 3 | cV2 |

