Android 在Launcher桌面添加应用快捷图标(适用于Android 7.0(API24) 及以下)

Launcher为了应用程序能够定制自己的快捷图标,就注册了一个 BroadcastReceiver 专门接收其他应用程序发来的快捷图标定制信息。所以只需要根据该BroadcastReceiver构造出相对应的Intent并装入我们的定制信息,最后调用 sendBroadcast 方法就可以创建一个快捷图标了。一般创建应用快捷图标有如下两种方案:

方案1:在长按桌面弹出的WIDGETS中手动选择添加

这里写图片描述

首先在应用的AndroidManifest.xml中需要创建快捷方式的Activity中增加如下action:

        <activity android:name=".AppShortcuts.AppShortcutsDemoActivity"><intent-filter><action android:name="android.intent.action.CREATE_SHORTCUT"/></intent-filter></activity>

接下来在刚才的Activity的onCreate()方法中添加如下代码:

        if (getIntent()!=null && getIntent().getAction()!=null){if(getIntent().getAction().equals(Intent.ACTION_CREATE_SHORTCUT)) {Intent _returnIntent = new Intent();_returnIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "studyDemo_shortcut");_returnIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.logo));_returnIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(this, MainActivity.class));setResult(RESULT_OK, _returnIntent);finish();}}

然后长按桌面弹出的WIDGETS中就可以看到我们添加的应用了


方案2:在代码中动态的向桌面添加/删除 应用快捷方式注意:

注意:针对Android 7.0(API24)及以下有效,在7.1及以上的版本中需要使用ShortcutManager的相关方法。若在Android8.0 及以上的系统中调用方案2中的方法时,会打印如下信息:
ActivityManager: Broadcast com.android.launcher.action.INSTALL_SHORTCUT no longer supported. It will not be delivered.
这里写图片描述

首先需要添加权限

    <!-- 添加快捷方式 --><uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /><!-- 移除快捷方式 --><uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /><!-- 查询快捷方式 --><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="com.android.launcher2.permission.READ_SETTINGS"/><uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS"/>

关键代码:

    /*** 添加当前应用的桌面快捷方式* * @param context*/public static void addShortcut(Context context, int appIcon) {Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");Intent shortcutIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);// 获取当前应用名称String title = null;try {final PackageManager pm = context.getPackageManager();title = pm.getApplicationLabel(pm.getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA)).toString();} catch (Exception e) {}// 快捷方式名称shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);// 不允许重复创建(不一定有效)shortcut.putExtra("duplicate", false);// 快捷方式的图标Parcelable iconResource = Intent.ShortcutIconResource.fromContext(context,appIcon);shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);context.sendBroadcast(shortcut);}/*** 删除当前应用的桌面快捷方式* 在android7.0 上测试无效* @param context*/public static void delShortcut(Context context) {Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");// 获取当前应用名称String title = null;try {final PackageManager pm = context.getPackageManager();title = pm.getApplicationLabel(pm.getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA)).toString();} catch (Exception e) {}// 快捷方式名称shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);Intent shortcutIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);context.sendBroadcast(shortcut);}/*** 判断当前应用在桌面是否有桌面快捷方式* * @param context*/public static boolean hasShortcut(Context context) {boolean result = false;String title = null;try {final PackageManager pm = context.getPackageManager();title = pm.getApplicationLabel(pm.getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA)).toString();} catch (Exception e) {}final String uriStr;if (android.os.Build.VERSION.SDK_INT < 8) {uriStr = "content://com.android.launcher.settings/favorites?notify=true";} else if (android.os.Build.VERSION.SDK_INT < 19) {uriStr = "content://com.android.launcher2.settings/favorites?notify=true";} else {uriStr = "content://com.android.launcher3.settings/favorites?notify=true";}final Uri CONTENT_URI = Uri.parse(uriStr);final Cursor c = context.getContentResolver().query(CONTENT_URI, null,"title=?", new String[]{title}, null);if (c != null && c.getCount() > 0) {result = true;}return result;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/70088.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 桌面工具,安卓怎样添加桌面工具

桌面工具(Widget)是Android系统的一大特色&#xff0c;通过桌面工具可以快速得到所需的信息&#xff0c;不必打开程序即可了解最新的内容。Android系统自带了一些常用的桌面工具&#xff0c;其他一些经过定制的系统也带有具有特色的桌面工具&#xff0c;同时&#xff0c;有很多…

【答辩问题】计算机专业本科毕业设计答辩技巧

下面是总结的一些答辩期间的问题&#xff08;结合论文中出现过的整理&#xff09; 1、MVC设计模式是指什么&#xff0c;其优缺点&#xff0c;怎样用到在你的程序里 2、SSM/SSH框架是指什么&#xff0c;其优缺点&#xff0c;怎样用到在你的程序里 3、前端用到了什么技术&…

基于SSM的毕业论文答辩系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

计算机专业毕业答辩问代码吗,计算机专业毕业论文答辩技巧

在做计算机毕业设计的整个过程中&#xff0c;一般有三个答辩&#xff0c;即开始答辩、中期答辩和最终答辩。有些学校简化为两个&#xff0c;即开题答辩和期末答辩。还有的学校将直接保留了最终答辩&#xff0c;省略了开始答辩和中期答辩。 当然不管你要参加几次答辩&#xff0c…

计算机专业毕业设计论文答辩PPT模板,10套计算机毕业设计答辩PPT模板

计算机专业毕业设计论文答辩PPT模板,10套计算机毕业设计答辩PPT模板 完整PPT模板包下载地址&#xff1a;计算机专业毕业设计论文答辩PPT模板 PPT模板预览 完整PPT模板包下载地址&#xff1a;10套计算机毕业设计答辩PPT模板

【答辩问题】计算机专业本科毕业设计答辩自述

各位老师,你们好!我叫XXX,来自计算机XX,我的论文题目是《在线考试系统》,论文是在XXX老师的指点下完成的,在这里我向X老师表示深深的谢意,向参加我的论文答辩各位老师表示衷心的感谢,并对我三年来的各位授课老师表示由衷的敬意。下面我将本论文设计的目的和主要内容向各位老师作…

outlook服务器邮件满了怎么办,Outlook邮箱不能接收邮件提示邮件箱已满的解决方法...

Outlook是一款很多用户都会用来收发邮件的邮箱工具&#xff0c;但是有时候邮件多了&#xff0c;可能会遇到不能接收邮件并提示邮箱已满的情况&#xff0c;该如何解决呢&#xff0c;为此这就给大家带来Outlook邮箱不能接收邮件提示邮件箱已满的解决方法吧。 存储的电子邮件数量有…

群晖端口转发 路由器配置

控制面板 - 外部访问 - 路由器配置 点击新增&#xff0c;可以增加内置的&#xff0c;或者自定义的转发机制 本机端口表示的是内部开启的端口号&#xff0c;比如ssh的端口22 外部端口表示外网可以访问的端口号&#xff0c;比如设置为8787 那么此时&#xff0c;如果你在外网需要…

群晖|你可能并不知道的群晖反向代理

最近在内网弄了台后台服务器来开发小程序&#xff0c;小程序呢是一定要走https的&#xff0c;所以就申请了SSL证书&#xff0c;本想通过nginx来进行https反向代理&#xff0c;但忘记nginx配置怎么写了。以前玩群晖的时候貌似见过哪儿有反向代理&#xff0c;一番研究&#xff0c…

分享免端口访问群晖的方法,可以顶级域名

文章目录 废话篇前言二、前提具备的条件三、群晖设置1、设置DDNS动态解析2、利用DDNS的主机域名来访问群晖3、设置套件为不同的别名 四、域名跳转1、借用第三方跳转工具2、具体操作 五、套件的跳转 废话篇 本篇文章为原创文章&#xff0c;可以保证在不出现大变化的前提下&…

群晖NAS搭建portainer

参考&#xff1a; 群晖、威联通、Linux最强docker管理工具portainer安装及汉化教程2022最新版本 Portainer官方文档 How to run Docker commands without sudo on a Synology NAS 因为群晖的NAS是基于linux但是限制很多的系统&#xff0c;有一些东西通过命令行操作可能会遇到权…

群晖NAS用户和用户组权限讲解

文章目录 废话篇前言用户和用户组是什么实例操作讲解梳理流程实际操作&#xff1a;添加用户组实例操作&#xff1a;新增用户 登录检查是否设置成功合理的用户组设置后文总结协助改进 废话篇 本篇文章为原创文章。转载请注明出处&#xff0c;感谢。 本人也有个人博客&#xff…

群晖DS918+ 添加多网口教程

很多软路由都是四网口、六网口为常见。 而群晖DS918 默认就只有 2个网口 这样一来对于多网口的软路由其它网口就无法充分利用上了 尤其是对于那些要做 ALL IN ONE 的玩家 在群晖里面安装虚拟机&#xff0c;装个 爱快 OpenWrt 利用多余的网口&#xff0c;实现路由功能 解决这个…

群晖NAS从入门到精通的所有帖子汇总,只要这一篇就够了

本章概述&#xff1a; 本站陆陆续续的转载、原创帖子也有十几二十篇了&#xff0c;从不同的角度对群晖NAS的各种骚操作都有深入的讲解&#xff0c;虽然很多文章都不是讲的很深入&#xff0c;但是针对小白入门已经是足够了&#xff0c;希望对小白来说是一个入门&#xff0c;群晖…

[NAS] Synology(群晖) / QNAP(威联通) 设置 MariaDB 远程访问 (附带多设备DB速度测试)

简介 MariaDB数据库管理系统是MySQL的一个分支&#xff0c;主要由开源社区在维护&#xff0c;采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。在存储引擎方面&#xff0c;使用XtraDB来代替MySQL的InnoDB。…

esxi设置群晖核显直通

1. 进入esxi后台依次点击 管理-硬件-PCI设备-选择显卡-切换直通-重新引导 重启之后就直通处于活动状态即可 2.在虚拟机关机状态设置虚拟机 添加pci设备 添加后&#xff0c;我们检查一下配置&#xff0c;CUP三个框框不要勾&#xff0c;内存要全部锁定 &#xff0c;不然启动不了…

在群晖上使用天翼云盘

国内的云盘接口一般都不公开&#xff0c;因此可玩性都不高&#xff0c;像 Rclone 中基本上都是国外的云盘&#xff0c;除了腾讯的 COS 和阿里的 OSS&#xff0c;因为这两者都支持 S3 对象存储。 老苏年初买了个天翼云盘的会员&#xff0c;一直在寻找天翼云盘在群晖上使用的办法…

TP-link路由器与群晖NAS的端口转发设置

首先列出我使用的设备的型号。 路由器型号: TP-LINK Archer C9 NAS型号&#xff1a;Synology DS416 需求定义&#xff1a;能够从外网访问路由器下内网中的NAS的各种服务&#xff08;如Web管理界面&#xff0c;Photo Station, Cloud Station, FTP等&#xff09; 实现思路与步骤&…

穿透内网远程访问群晖NAS

现代科技日新月异&#xff0c;我们身边的电子设备也在不断更新&#xff0c;日积月累之下&#xff0c;被淘汰的电子设备越来越多&#xff0c;难道就让这些性能不算差的电子设备从此闲置么&#xff0c;这明显不符合我们物尽其用的原则&#xff0c;不少玩家都将闲置的电脑改造成了…

PC - 史上最简单的远程访问群晖 NAS 方法

文章目录 1、下载安装cpolar群晖套件1.1 注册cpolar账号1.2 下载cpolar群晖套件1.3 安装cpolar群晖套件 2、创建隧道映射5000端口2.1 打开cpolar群晖套件2.2 创建远程访问隧道2.3 获取公网URL地址 3、公网远程群晖NAS 教大家一个新手小白都可以轻松掌握的远程群晖NAS方法&#…