创建Shortcut快捷键与桌面图标

1.Shortcut概念

       Shortcut 是Android-25新增的一项类似iOS的 3D Touch 功能的快捷方式组件,但是有着不同的表现形式,因为Android在硬件上不支持触摸压力感应,所以表现形式为长按,而iOS须用力长按。

       Android-26新增生成桌面图标方法。

2.快捷键静态配置

    一. 在 res/xml 文件夹底下创建一个xml

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:enabled="true"
        android:icon="@mipmap/ic_bar_detail_write"
        android:shortcutDisabledMessage="@string/shortcut_publish"
        android:shortcutId="publish"
        android:shortcutLongLabel="@string/shortcut_publish"
        android:shortcutShortLabel="@string/shortcut_publish">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetClass="com.yanshi.writing.ui.bar.PublishPostActivity"
            android:targetPackage="com.yanshi.writing" />
        <categories android:name="android.shortcut.conversation" />
    </shortcut>
</shortcuts>

二. 清单文件注册 

在 AndroidMainfest.xml 的默认启动页里添加 meta-data 标签配置

<activity>
 <meta-data 
     android:name="android.app.shortcuts"
     android:resource="@xml/shortcut" />
</activity>

2.快捷键动态配置 版本大于25

ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE);
List<ShortcutInfo> dynaShortcuts = new ArrayList<>();
ShortcutInfo.Builder builder = new ShortcutInfo.Builder(context, "shortcutID");
builder.setIcon(Icon.createWithResource(context, icon));  //设置图标
builder.setShortLabel(title);   //设置短标题
builder.setLongLabel(longTitle);   //设置长标题
builder.setIntent(IntentUtil.openActionIntent("action", "包名", "类名"));
builder.setCategories(new TreeSet<String>() {
    {
        this.add("android.shortcut.conversation");//现在唯一表示配置
    }
});
dynaShortcuts.add(builder.build());
shortcutManager.addDynamicShortcuts(dynaShortcuts);  //添加动态的shortcuts
List<ShortcutInfo> shortcutInfos = shortcutManager.getPinnedShortcuts(); //获得所有pin shortcut
List<ShortcutInfo> shortcutInfos = shortcutManager.getDynamicShortcuts(); //获得所有dynamic shortcut
shortcutManager.disableShortcuts(List<String> shortcutIds);//disableShortcuts 置灰
shortcutManager.removeDynamicShortcuts(List<String> shortcutIds);//disableShortcuts 删除
shortcutManager.removeAllDynamicShortcuts();//disableShortcuts 删除全部

 

3.桌面图标

需要获取桌面权限:

<!-- 添加快捷方式 --> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

<!-- 移除快捷方式 --> <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />

跳转的类(ps:未标明是Intent.ACTION_MAIN和Intent.CATEGORY_LAUNCHER的类)AndroidManifest.xml配置中必须加android:exported="true"属性,不然跳转不过去。26版本以下可能进不去

一. 创建

if (26版本及以上) {
    if (shortcutManager.isRequestPinShortcutSupported()) {
        Intent shortcutInfoIntent = new Intent(context, "跳转类");
        shortcutInfoIntent.setAction(Intent.ACTION_VIEW);
        PendingIntent shortcutCallbackIntent = PendingIntent.getBroadcast(context, 0,
                new Intent(context, "返回跳转类"),
                PendingIntent.FLAG_UPDATE_CURRENT);
         builder.setIcon(Icon.createWithResource(context, icon));  //设置图标
         builder.setShortLabel(title);   //设置短标题
        builder.setIntent(shortcutInfoIntent);
        shortcutManager.requestPinShortcut(builder.build(), shortcutCallbackIntent.getIntentSender());
    }
} else {
    Intent shortcut = new Intent(INSTALL_SHORTCUT_ACTION);
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); //设置短标题
    Parcelable value = Intent.ShortcutIconResource.fromContext(context, icon);//设置图标
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON, value);
    shortcut.putExtra("duplicate", false);
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, value);
    
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
    intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    intent.setClass(context, "跳转类"));
    
    shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent));
    context.sendBroadcast(shortcut);
}

 

二. 删除

if (26版本及以上) {
    shortcutManager.removeDynamicShortcuts(List<String> shortcutIds);//disableShortcuts 删除
} else {
    Intent intent = new Intent(UNINSTALL_SHORTCUT_ACTION);
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);//设置短标题
        
     Intent intent = new Intent(Intent.ACTION_MAIN);
     intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
     intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    intent.setClass(context, "跳转类"));
    
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
    context.sendBroadcast(intent);
}

 完毕,若有问题请留言!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值