Android应用程序创建桌面快捷方式

2023-10-26

<pre name="code" class="java">测试环境为Adnroid 2.1以上。
第一步:AndroidManifest.xml 权限配置: 
添加快捷方式权限:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> 
验证快捷方式是否存在权限: 
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
删除快捷方式权限: 
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
代码如下:
创建ShortCutSample类
<pre name="code" class="java">package cn.haokuai.maya.suppliers.app;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Parcelable;

public class ShortCutSample {
	/**
	 * 添加快捷方式
	 * */
	public void creatShortCut(Activity activity, String shortcutName,
			int resourceId) {
		Intent intent = new Intent();
		intent.setClass(activity, AppStart.class);
		/* 以下两句是为了在卸载应用的时候同时删除桌面快捷方式 */
		intent.setAction("android.intent.action.MAIN");
		intent.addCategory("android.intent.category.LAUNCHER");
		Intent shortcutintent = new Intent(
				"com.android.launcher.action.INSTALL_SHORTCUT");
		// 不允许重复创建
		shortcutintent.putExtra("duplicate", false);
		// 需要现实的名称
		shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
		// 快捷图片
		Parcelable icon = Intent.ShortcutIconResource.fromContext(
				activity.getApplicationContext(), resourceId);
		shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
		// 点击快捷图片,运行的程序主入口
		shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
		// 发送广播。OK
		activity.sendBroadcast(shortcutintent);
	}

	/**
	 * 删除快捷方式
	 * */
	public void deleteShortCut(Activity activity, String shortcutName) {
		Intent shortcut = new Intent(
				"com.android.launcher.action.UNINSTALL_SHORTCUT");
		// 快捷方式的名称
		shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);
		// 在网上看到到的基本都是一下几句,测试的时候发现并不能删除快捷方式。
		// String appClass = activity.getPackageName()+"."+
		// activity.getLocalClassName();
		// ComponentName comp = new ComponentName( activity.getPackageName(),
		// appClass);
		// shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new
		// Intent(Intent.ACTION_MAIN).setComponent(comp));
		/** 改成以下方式能够成功删除,估计是删除和创建需要对应才能找到快捷方式并成功删除 **/
		Intent intent = new Intent();
		intent.setClass(activity, activity.getClass());
		intent.setAction("android.intent.action.MAIN");
		intent.addCategory("android.intent.category.LAUNCHER");
		shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
		activity.sendBroadcast(shortcut);
	}

	/**
	 * 判断是否存在快捷方式
	 * */
	public boolean hasShortcut(Activity activity, String shortcutName) {
		String url = "";
		int systemversion = Integer.parseInt(android.os.Build.VERSION.SDK);
		/* 大于8的时候在com.android.launcher2.settings 里查询(未测试) */
		if (systemversion < 8) {
			url = "content://com.android.launcher.settings/favorites?notify=true";
		} else {
			url = "content://com.android.launcher2.settings/favorites?notify=true";
		}
		ContentResolver resolver = activity.getContentResolver();
		Cursor cursor = resolver.query(Uri.parse(url), null, "title=?",
				new String[] { shortcutName }, null);
		if (cursor != null && cursor.moveToFirst()) {
			cursor.close();
			return true;
		}
		return false;
	}
}
调用测试代码
public class Welcome extends Activity {
    
	private static final String TAG  = "Welcome";
	 final AppContext ac = (AppContext) getApplication();
	 private Button btn;
	 private ViewFlow viewFlow;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final View view = View.inflate(this, R.layout.welcome, null);
        setContentView(view);
        ShortCutSample sample =new ShortCutSample(); 
		String shortcutName=getString(R.string.app_name); 
		if(sample.hasShortcut(this, shortcutName)) 
			sample.deleteShortCut(this,shortcutName); 
		else 
			sample.creatShortCut(this,shortcutName,R.drawable.ic_launcher); 
}}

 

                
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android应用程序创建桌面快捷方式 的相关文章

  • 在 Android 中设置 Signalr:崩溃/挂起问题

    我跟着本教程 https whathecode wordpress com 2014 03 20 getting started with the java signalr sdk 为我的 Android 应用程序设置一个 NET 后端来实
  • 清单合并失败:属性 application@appComponentFactory

    一切都很好 但我正在尝试添加这个库https github com wdullaer MaterialDateTimePicker https github com wdullaer MaterialDateTimePicker有了这个 i
  • BackupAgent:“无法恢复包...”

    我已经实现了 BackupAgent 如下所述数据备份 http developer android com guide topics data backup html 注册了一个 API 密钥并在我的 Manifest 中声明了 Back
  • Android XML 解析与 RSS

    我有我的 Rss 文件项目
  • 创建 Android 智能应用横幅

    Android 设备有类似 iOS 6 智能应用横幅的解决方案吗 这是智能应用横幅的代码 从 Chrome 44 Beta 开始 您可以在 Android 版 Chrome 中推送您的应用程序 您网站上的本机应用程序安装横幅 请看下面的答案
  • 使用 Android 将文件上传到 Django Web 服务

    我正在开发一个与 Django 后端交互的 Android 应用程序 我已经使用 mod wsgi 部署了 Web 服务 并且有许多 Web 服务调用可以工作并且已经过测试 所以我知道一切都应该工作 所有其他呼叫都工作正常 这是我在Andr
  • 将 SearchView 阈值设置为零

    我在用SearchView在android中 我将适配器设置为搜索视图 但建议弹出框在一个字符后显示 因为我将阈值设置为1 它不接受小于1的数字 如何将阈值设置为零 请喜欢 Google 因为您可能知道 Google Play 的应用程序没
  • Android 中的 GPS 超时

    在黑莓中 我们使用超时来获取位置 这样如果它在这么长时间内没有重新调整位置 我们就会知道 但是在Android中 没有超时的概念 任何人都可以告诉我们替代方案 我们可以发现 在这么长时间之后 GPS没有位置更新 您可以使用两个线程来实现此超
  • Android SDK 构建工具、平台工具和工具是什么?应该使用哪个版本?

    我知道这是一个非常基本的问题 但令我惊讶的是 我找不到任何有关 Android SDK Build tools 的文档 除了 Android SDK 工具和 Android SDK 平台工具之外 还有一堆 Android SDK 构建工具
  • 将 LinkedHashset 内容复制到新的 ArrayList?

    我有一个最初包含一些内容的 listView 如果它得到相同的内容 我通过删除重复linkedhashset 现在 我想复制linkedhashset内容 即没有重复的内容到新的ArrayList 我尝试复制通过 p addAll 0 lh
  • 谷歌gson LinkedTreeMap类转换为myclass

    我知道这个问题以前已经被问过 由于我对java和android的新手技能 我一个多星期都无法解决这个问题 我和我的一位朋友正在开发一个 Android 项目 其中有一些类似的事情 最奇怪的部分是 只有当我从 Google Play 商店下载
  • 如何为自定义视图组实现 Android Accessibility

    我有一个从 ViewGroup 扩展的 CustomViewGroup 其中我有 2 个文本视图和 3 4 个不同的按钮 这些按钮是我从不同的 XML 文件中填充的 我的问题是它似乎无法访问 我最后需要做什么才能看到问题所在 您能给我指点有
  • android:configChanges 清单文件中不允许错误字符串类型

    这是我的清单文件 其中显示 android configChanges 不允许的错误字符串类型 请帮助我纠正错误 下面是我的清单文件
  • BLE:使用 Android / iOS 读取长特征值

    对于正常的特征读取 仅读取 MTU 大小 20 字节 的数据 我的客户将提供更大尺寸 超过 100 字节 的特征 我看到 BLE 提供了 长读取 功能 可以读取直到达到特征的大小 https bluegiga zendesk com ent
  • Android数据库访问设计方法

    我有一个关于数据访问的一般 Android 设计问题 我的应用程序中有许多活动需要访问 SQLite 数据库 为了将所有数据访问逻辑包装在一个地方 我创建了一个 DatbaseHandler 类来处理所有数据访问逻辑 此类负责构建 wher
  • 从多个通知启动活动会覆盖之前的意图

    public static void showNotification Context ctx int value1 String title String message int value2 NotificationManager no
  • Android:从 Android Java 源代码创建 UML [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以从我的 Java Android 源代码自动创建 Uml 的程序 我测试过ArgoU
  • 将文件夹中结构化的预构建文件集添加到 android out 文件夹

    我为arm编译了glibc 这与Android glibc或bionic C不同 因为我编译的glibc环境将有助于提供更多api 现在我可以在 Android 运行时将 glibc 环境复制到 system 文件夹中 并且在执行 chro
  • 如何防止LRU缓存android中的内存不足错误

    我在我的 Android 应用程序中使用内存 LRU 缓存来缓存位图 但是在将某些位图加载到 LRU 映射中后 应用程序强制关闭并提示内存不足异常 我花了一整天的时间 但还没有找到解决方案 请任何人都可以帮助我 我严重陷入这个问题 提前致谢
  • 根据内容对列表视图中的相似行进行分组

    i have a listview that displays a set of rows each row is clickable now i wish to group similar type of rows under one h

随机推荐

  • 矩阵求逆四种方法

    注 用A B表示某矩阵 E表示单位矩阵 用A 表示A逆 用 A 表示A的行列式 A E 表示拼接矩阵 一 公式法 先求A行列式结果 再求A伴随矩阵 最后再求A逆矩阵 A 0 则 A A A 注 图片中detA就是 A 二 初等变换法 A E
  • 【沧海拾昧】Proteus8仿真stm32:ADC转换程序

    C0102 沧海茫茫千钟粟 且拾吾昧一微尘 沧海拾昧集 CuPhoenix 阅前敬告 沧海拾昧集仅做个人学习笔记之用 所述内容不专业不严谨不成体系 如有问题必是本集记录有谬 切勿深究 目录 一 原理图绘制 二 多位七段数码管 三 ADC引脚
  • 一维动态规划总结

    题目列表 给一个N 输入 求某种情况的最大值或者最小值情况 279 Perfect Squares 思路 最差情况下 总体是定义一个dp N 1 或者初始化前面dp 0 或者dp 1 279 Perfect Squares 解析 Given
  • sql:command not found

    写一个脚本zl sh 用来删除数据库mydatabase中某个表mytable的某行数据 bin bash HOSTNAME 127 0 0 1 PORT 2918 USERNAME root PASSWORD root TABLENAME
  • 使用mockjs创建假数据

    npm install mockjs 创建mock文件夹 在mock文件夹下创建1 js 1 js import Mock from mockjs 引入mockjs export default Mock mock postdata1 po
  • 剑网三服务器缺少必要启动文件,win7系统玩剑网三游戏经常掉线的解决方法

    很多小伙伴都遇到过win7系统玩剑网三游戏经常掉线的困惑吧 一些朋友看过网上零散的win7系统玩剑网三游戏经常掉线的处理方法 并没有完完全全明白win7系统玩剑网三游戏经常掉线是如何解决的 今天小编准备了简单的解决办法 只需要按照1 掉线基
  • 循环神经网络RNN以及几种经典模型

    RNN简介 现实世界中 很多元素都是相互连接的 比如室外的温度是随着气候的变化而周期性的变化的 我们的语言也需要通过上下文的关系来确认所表达的含义 但是机器要做到这一步就相当得难了 因此 就有了现在的循环神经网络 他的本质是 拥有记忆的能力
  • el-menu-item内容过多,不能滚动

    问题描述 这里放了六张图片 只能看到最下面的部分 上面的部分被挤出了屏幕外面 这里的弹出框是element ui组件自动生成的 即这个div 我此时有关这部分的代码如下 解决思路 一开始是想抓住这个生成的div 修改这个div的样式试图让它
  • python 2.x安装

    1 查看当前python版本 python version 2 安装最新2 x版本 brew install python 2 安装完成后 注意一下提示 pip and setuptools have been installed To u
  • 阻碍区块链应用落地的五大难题和解决方案

    2018年初区块链掀起了一阵新热潮 多家互联网公司纷纷宣布推出区块链项目 新兴的区块链项目方和媒体百家争鸣 一时之间区块链行业风光无限 区块链概念的火爆 使得越来越多的人开始学习它 理解它 甚至 拥抱 它 只是沉浸在 狂欢 里的众人怎么也没
  • show,attend and tell(image caption论文复现总结)

    论文中的核心思想 GitHub上的Image Caption项目https github com sgrvinod a PyTorch Tutorial to Image Captioning 研究的问题 Image Caption 为图片
  • _I,_O,_IO,条件编译#ifndf _HEAD_H中的下划线_是什么,有什么用

    1 其实质是一个宏名 由此我们可以防止发生重复定义或声明 2 编程风格 使标识符含义更清晰易懂 假设你的头文件名为head h 根据习惯 我们声明一个宏HEAD H 对应这个头文件 在头文件中开始的地方和结尾的地方加上 对HEAD H的声明
  • CentOS8更换阿里云yum源

    以下是使用阿里云的CentOS 8镜像源配置文件作为示例 备份原有的yum源文件 以便需要时恢复 sudo mv etc yum repos d CentOS tmp 下载并安装阿里云的CentOS 8源配置文件 sudo curl o e
  • AJAX JSON的数据传输

    文章目录 AJAX的JSON引入 javascriptJSON对象创建和访问 javascript怎么创建JSON对象 javascript访问JSON javascript字符串转换成JSON对象 对案例进行改造 使用json传输 将ja
  • spring boot 使用审计

    创建User类 测试类只有一个name属性 Entity Table name UcenterUser Data public class User extends BaseEntity private String name 抽取一个基类
  • ArrayList特点分析及源码阅读

    1 特点 ArrayList是个动态数组 实现List接口 主要用来存储数据 如果存储基本类型的数据 如int long boolean short byte 那只存储它们对应的包装类 增删慢 每次删除元素 都需要更改数组长度 拷贝以及移动
  • warning: retrying (retry(total=4, connect=none, read=none, redirect=none, st

    今天在利用pip安装时遇到了一些问题 首先在使用pip语句时 提示pip不是内部命令行 但是其实已经安装了pip 原因 由于python3 x之后pip都是命名为pip3 解决 将安装语句的pip 改为pip3 问题2 使用pip安装安装包
  • 一文看懂软件测试方法和规范

    软件测试方法是指测试软件的方法 随着软件测试技术的不断发展 测试方法也越来越多样化 针对性更强 选择合适的软件测试方法可以让我们事半功倍 本文主要介绍的是软件测试方法和规范 跟随小编一起来了解一下具体的测试流程及规范吧 软件测试基本流程图
  • jmeter吞吐量_性能测试jmeter详解

    曾光红 文 目前最新版本发展到5 0版本 需要Java7以上版本环境 下载解压目录后 进入apache jmeter 5 0bin 双击ApacheJMeter jar文件启动JMemter 1 创建测试任务 添加线程组 右击测试计划 在快
  • Android应用程序创建桌面快捷方式

    pre class java 测试环境为Adnroid 2 1以上 第一步 AndroidManifest xml 权限配置 添加快捷方式权限 pre