创建Shortcut快捷键与桌面图标

1.Shortcut概念

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

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

2.快捷键静态配置

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


    
        
        
    

二. 清单文件注册 

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


 

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

ShortcutManager shortcutManager = (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE);
List 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() {
    {
        this.add("android.shortcut.conversation");//现在唯一表示配置
    }
});
dynaShortcuts.add(builder.build());
shortcutManager.addDynamicShortcuts(dynaShortcuts);  //添加动态的shortcuts
List shortcutInfos = shortcutManager.getPinnedShortcuts(); //获得所有pin shortcut
List shortcutInfos = shortcutManager.getDynamicShortcuts(); //获得所有dynamic shortcut
shortcutManager.disableShortcuts(List shortcutIds);//disableShortcuts 置灰
shortcutManager.removeDynamicShortcuts(List shortcutIds);//disableShortcuts 删除
shortcutManager.removeAllDynamicShortcuts();//disableShortcuts 删除全部

 

3.桌面图标

需要获取桌面权限:

跳转的类(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 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);
}

 完毕,若有问题请留言!

 

 

 

你可能感兴趣的:(android开发日志)