App的快捷方式分为三种:静态快捷方式、动态快捷方式、固定快捷方式
静态快捷方式
静态快捷方式直接在xml文件中定义即可,首先在res\\xml文件夹下创建名为shortcut.xml的文件,并填入如下代码
shortcut.xml<?xml version=\"1.0\" encoding=\"utf-8\"?><shortcuts xmlns:android=\"http://schemas.android.com/apk/res/android\"><shortcutandroid:shortcutId=\"compose1\"android:enabled=\"true\"android:icon=\"@drawable/ic_launcher_background\"android:shortcutShortLabel=\"@string/compose_shortcut_short_label1\"android:shortcutLongLabel=\"@string/compose_shortcut_long_label1\"android:shortcutDisabledMessage=\"@string/compose_disabled_message1\"><intentandroid:action=\"android.intent.action.VIEW\"android:targetPackage=\"com.example.myapplication\"android:targetClass=\"com.example.myapplication.ActivityTest\" /><categories android:name=\"android.shortcut.conversation\" /></shortcut><\\shortcuts>
其中
shortcutId 这是必须填写的值,此值必须唯一,否则会将两个相同id的快捷方式识别为同一个enable 该快捷方式是否可用icon 该快捷方式显示的小图标shortcutShortLabel 该值必须为String.xml文件中定义的值,是对快捷方式的简短描述,如果LongLabel的描述过长则会显示ShortLabelshortcutLongLabel 该值必须为String.xml文件中定义的值,是对快捷方式的描述,当描述过长的时候将会显示ShortLabel中的信息shortcutDisableMessage 当用户尝试使用被禁用的快捷方式的时候显示的信息,向用户显示为什么被禁用
然后在AndroidManifest文件的activity标签中将shortcut添加进去
<activity android:name=\".MainActivity\"><intent-filter><action android:name=\"android.intent.action.MAIN\" /><category android:name=\"android.intent.category.LAUNCHER\" /></intent-filter><meta-data android:name=\"android.app.shortcuts\"android:resource=\"@xml/shortcuts\" /></activity>
这样再启动app,长按图标,就会有这样的效果(如果系统支持的话)
如果需要多个快捷方式的话,只需要在shortcut.xml文件中再添加一个就好了
<?xml version=\"1.0\" encoding=\"utf-8\"?><shortcuts xmlns:android=\"http://schemas.android.com/apk/res/android\"><shortcutandroid:shortcutId=\"compose1\"android:enabled=\"true\"android:icon=\"@drawable/ic_launcher_background\"android:shortcutShortLabel=\"@string/compose_shortcut_short_label1\"android:shortcutLongLabel=\"@string/compose_shortcut_long_label1\"android:shortcutDisabledMessage=\"@string/compose_disabled_message1\"><intentandroid:action=\"android.intent.action.VIEW\"android:targetPackage=\"com.example.myapplication\"android:targetClass=\"com.example.myapplication.ActivityTest\" /><categories android:name=\"android.shortcut.conversation\" /></shortcut><shortcutandroid:shortcutId=\"compose2\"android:enabled=\"true\"android:icon=\"@drawable/ic_launcher_background\"android:shortcutShortLabel=\"@string/compose_shortcut_short_label1\"android:shortcutLongLabel=\"@string/compose_shortcut_long_label1\"android:shortcutDisabledMessage=\"@string/compose_disabled_message1\"><intentandroid:action=\"android.intent.action.VIEW\"android:targetPackage=\"com.example.myapplication\"android:targetClass=\"com.example.myapplication.MainActivity\" /><categories android:name=\"android.shortcut.conversation\" /></shortcut></shortcuts>
动态快捷方式
动态快捷方式是可以在程序运行中进行创建的,创建一个ActivityTest作为第二个页面,在显示页面的时候动态创建快捷方式
ActivityTest.javapublic class ActivityTest extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test);ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);ShortcutInfo shortcut = new ShortcutInfo.Builder(this, \"compose3\").setShortLabel(\"快捷方式二\").setLongLabel(\"这是快捷方式二\").setIcon(Icon.createWithResource(this, R.drawable.ic_launcher_foreground)).setIntent(new Intent(ActivityTest.this, ActivityTest2.class).setAction(Intent.ACTION_VIEW)).build();shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));}}
在刚安装和打开第一个界面的时候快捷方式是这样的
在打开第二个界面之后
快捷方式就会变成这样了,多了一个动态创建的快捷方式。
固定快捷方式
固定快捷方式可以将快捷方式以图标的方式固定在桌面上,创建第三个界面ActivityTest2来创建固定的快捷方式
public class ActivityTest2 extends AppCompatActivity {Context mContext;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_test2);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ShortcutManager shortcutManager =mContext.getSystemService(ShortcutManager.class);assert shortcutManager != null;if (shortcutManager.isRequestPinShortcutSupported()) {ShortcutInfo pinShortcutInfo =new ShortcutInfo.Builder(mContext, \"compose4\").setShortLabel(\"这是快捷方式三\").setLongLabel(\"这是快捷方式三\").setDisabledMessage(\"你真的要禁用吗?\").setIntent(new Intent(ActivityTest2.this, ActivityTest2.class).setAction(Intent.ACTION_VIEW)).setIcon(Icon.createWithResource(mContext, R.drawable.ic_launcher_foreground)).build();// 可以在此创建intent来通知你用户创建了这个固定快捷方式Intent pinnedShortcutCallbackIntent =shortcutManager.createShortcutResultIntent(pinShortcutInfo);//在此完善你接收到广播之后的动作PendingIntent successCallback = PendingIntent.getBroadcast(mContext, /* request code */ 0,pinnedShortcutCallbackIntent, /* flags */ 0);shortcutManager.requestPinShortcut(pinShortcutInfo,successCallback.getIntentSender());}}});}}
然后在打开第三个页面的时候,就可以点击按钮来创建固定快捷方式
那么快捷方式就会出现在屏幕上了