赞
踩
参考 developer.android.google.cn 创建快捷方式
来自官网的说明:
原生系统上,长按应用图标显示快捷方式,点击快捷方式就打开应用的某个页面。
在应用的主页面添加如下,shortcuts 就是要配置的文件。
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
主页面就是配置了 android.intent.action.MAIN
和 android.intent.category.LAUNCHER
的 Activity 。
示例:
<activity
android:name=".MainActivity"
android:exported="true">
<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>
创建 res/xml/shortcuts.xml 文件,配置如下,
<?xml version ="1.0" encoding="utf-8"?> <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:enabled="true" android:icon="@drawable/shape_oval_sweep" android:shortcutDisabledMessage="@string/shortcut_disabled_message1" android:shortcutId="id11" android:shortcutLongLabel="@string/shortcut_long_label1" android:shortcutShortLabel="@string/shortcut_short_label1"> <intent android:action="android.intent.action.VIEW" android:data="shortcut1" android:targetClass="com.test.luodemo.appwidget.ShortcutActivity" android:targetPackage="com.test.luodemo" /> </shortcut> <shortcut android:enabled="true" android:shortcutDisabledMessage="@string/shortcut_disabled_message2" android:shortcutId="id22" android:icon="@drawable/shape_oval_liner" android:shortcutLongLabel="@string/shortcut_long_label2" android:shortcutShortLabel="@string/shortcut_short_label2"> <intent android:action="android.intent.action.VIEW" android:data="shortcut2" android:targetClass="com.test.luodemo.appwidget.ShortcutActivity" android:targetPackage="com.test.luodemo" /> </shortcut> </shortcuts>
创建了两个快捷方式。
intent 内部元素
搞定,运行效果
动态的意思就是,需要的时候添加,不需要时删除。
写两个 Button ,一个创建,一个删除。
都是用 androidx.core.content.pm.ShortcutManagerCompat
。
很简单,一目了然。功能是 跳转到设置查看本应用的通知。
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
ShortcutInfoCompat shortcut = new ShortcutInfoCompat.Builder(mContext, "iddynamic")
.setShortLabel("此应用的通知")
.setLongLabel("动态快捷方式长描述")
.setIcon(IconCompat.createWithResource(mContext, R.drawable.shape_ring))
.setIntent(new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
.putExtra(Settings.EXTRA_APP_PACKAGE,mContext.getPackageName()))
.build();
ShortcutManagerCompat.pushDynamicShortcut(mContext, shortcut);
根据 id 删除单个,
List<String> mList = new ArrayList<>();
mList.add(shortcutId);
ShortcutManagerCompat.removeDynamicShortcuts(mContext, mList);
删除所有,
ShortcutManagerCompat.removeAllDynamicShortcuts(mContext);
效果
使用 ShortcutManager
实现,
private void addPinShortcut(){ ShortcutManager shortcutManager = mContext.getSystemService(ShortcutManager.class); if (shortcutManager.isRequestPinShortcutSupported()) { //跳转应用消息 Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", mContext.getPackageName(), null); intent.setData(uri); // Enable the existing shortcut with the ID "my-shortcut". ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(mContext, "my-shortcut") .setIcon(Icon.createWithResource(mContext, R.drawable.shape_rectangle_corners)) .setShortLabel("固定快捷方式") .setLongLabel("固定快捷方式长描述") .setIntent(intent) .build(); Intent pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo); PendingIntent successCallback; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { successCallback = PendingIntent.getActivity(mContext, 101, pinnedShortcutCallbackIntent, PendingIntent.FLAG_IMMUTABLE); } else { successCallback = PendingIntent.getActivity(mContext, 101, pinnedShortcutCallbackIntent, PendingIntent.FLAG_UPDATE_CURRENT); } boolean ret = shortcutManager.requestPinShortcut(pinShortcutInfo,successCallback.getIntentSender()); Log.d(TAG , "addPinShortcut -- ret : " + ret); } }
本例功能是跳转掉设置,打开此应用的应用信息页面。
运行效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。