How to use the Assist API android m
Hello, I
have an app opened with the Assist API and it works with 4.1 to 5.1.1, but in android M dev preview when I swipe up on the home button I see the card on the screen but don’t get the option to choose how the app I want to use solves this problem in my code This is my java class :
package com.d4a.toolbelt;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.d4a.toolbelt.R;
public class QuickLaunch extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quick_launch);
}
/** Called when the user clicks the music button */
public void music(View view) {
Intent intent = new Intent("android.intent.action.MUSIC_PLAYER");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
/** Called when the user clicks the play button */
public void play(View view) {
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.android.vending");
startActivity(launchIntent);
}
/** Called when the user clicks the web button */
public void web(View view) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com/"));
startActivity(browserIntent);
}
/** Called when the user clicks the email button */
public void email(View view) {
Intent intent = getPackageManager().getLaunchIntentForPackage("com.google.android.gm");
startActivity(intent);
}
/** Called when the user clicks the sms button */
public void chat(View view) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName("com.d4a.sms","de.ub0r.android.smsdroid.ConversationListActivity"));
intent.putExtra("grace", "Hi");
startActivity(intent);
}
/** Called when the user clicks the settings button */
public void settings(View view) {
Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.settings");
startActivity(intent);
}
/** Called when the user clicks the camara button */
public void cam(View view) {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
}
/** Called when the user clicks the video camara button */
public void video_cam(View view) {
Intent intent = new Intent("android.media.action.VIDEO_CAPTURE");
startActivityForResult(intent, 0);
}
/** Called when the user clicks the google now button */
public void now(View view) {
Intent intent = getPackageManager().getLaunchIntentForPackage("com.google.android.googlequicksearchbox");
startActivity(intent);
}
}
Here is my list :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.d4a.toolbelt"
android:versionCode="5"
android:versionName="1.5" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="22" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.d4a.toolbelt.QuickLaunch" android:launchMode="singleInstance" android:theme="@style/Theme.Transparent">
<intent-filter>
<action android:name="android.intent.action.ASSIST" />
<action android:name="android.intent.extra.ASSIST_CONTEXT" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>
Any help would be great
Thanks in advance!
Solution
When you press and hold the Home button in your Marshmallow device, it invokes the default assistive app set in Settings> Apps> Configure App (the settings icon on the toolbar), >Default Apps> Assistive & Speech Input, > Assistive Apps.
You can check if your app is set as the default Assist app,
and you can redirect the user to the settings screen in your activity with the following code, where the user can select the default Assist app.
String assistant =
Settings.Secure.getString(getContentResolver(),
"voice_interaction_service");
boolean areWeGood = false;
if (assistant != null) {
ComponentName cn = ComponentName.unflattenFromString(assistant);
if (cn.getPackageName().equals(getPackageName())) {
areWeGood = true;
}
}
if (areWeGood) {
your app has already been set as Assist app.
finish();
} else {
your app has not been set as Assist app. Redirect user to the settings screen.
startActivity(new Intent(Settings.ACTION_VOICE_INPUT_SETTINGS));
}