快速使用shortcut,适配各种ROM
常用API
/** * 添加快捷方式 * * @param context context * @param actionIntent 要启动的Intent * @param name name * @param allowRepeat 是否允许重复 * @param iconBitmap 快捷方式图标 */ public static void addShortcut(Context context, Intent actionIntent, String name, boolean allowRepeat, Bitmap iconBitmap) /** * 移除快捷方式 * * @param context context * @param actionIntent 要启动的Intent * @param name name */ public static void removeShortcut(Context context, Intent actionIntent, String name) /** * 更新桌面快捷方式图标,需要注意的是,更新快捷方式在很多手机上都不能生效,需要系统权限。可以通过先删除、再新增的方式来实现。 * * @param context context * @param title 快捷方式名 * @param intent 快捷方式Intent * @param bitmap 快捷方式Icon */ public static void updateShortcutIcon(Context context, String title, Intent intent, Bitmap bitmap) /** * 判断快捷方式是否存在,基础方式 * <font color=red>注意:</font> 有些手机无法判断是否已经创建过快捷方式<br/> * 因此,在创建快捷方式时,请添加<br/> * shortcutIntent.putExtra("duplicate", false);// 不允许重复创建<br/> * 最好使用{@link #isShortCutExist(Context, String, Intent)} * 进行判断,因为可能有些应用生成的快捷方式名称是一样的的<br/> * * @param context context * @param title 快捷方式名 * @return 是否存在 */ public static boolean isShortCutExist(Context context, String title) /** * 判断快捷方式是否存在,严格方式,增加了Intent的检查 * * 不一定所有的手机都有效,因为国内大部分手机的桌面不是系统原生的<br/> * 更多请参考{@link #isShortCutExist(Context, String)}<br/> * 桌面有两种,系统桌面(ROM自带)与第三方桌面,一般只考虑系统自带<br/> * 第三方桌面如果没有实现系统响应的方法是无法判断的,比如GO桌面<br/> * * @param context context * @param title 快捷方式名 * @param intent 快捷方式Intent * @return 是否存在 */ public static boolean isShortCutExist(Context context, String title, Intent intent) /** * 为任意PackageName的App添加快捷方式 * * @param context context * @param pkg 待添加快捷方式的应用包名 * @return 返回true为正常执行完毕 */ public static boolean addShortcutByPackageName(Context context, String pkg) /** * 显示\隐藏Launcher入口 * * @param context context * @param launcherClass launcherClass */ public static void toggleFlowEntrance(Context context, Class launcherClass) 使用Launcher入口需要在AndroidMainifest文件中注册新增的入口Activity,只需添加多个如下配置的intent-filter即可,例如:
示例
public class MainActivity extends Activity { // 快捷方式名 private String mShortcutName = "学习工具"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void addShortcutTest(View view) { // 系统方式创建 // ShortcutUtils.addShortcut(this, getShortCutIntent(), mShortcutName); // 创建前判断是否存在 if (!ShortcutSuperUtils.isShortCutExist(this, mShortcutName, getShortCutIntent())) { ShortcutUtils.addShortcut(this, getShortCutIntent(), mShortcutName, false, BitmapFactory.decodeResource(getResources(), com.xys.shortcut_lib.R.drawable.ocsplayer)); finish(); } else { Toast.makeText(this, "Shortcut is exist!", Toast.LENGTH_SHORT).show(); } // 为某个包创建快捷方式 // ShortcutSuperUtils.addShortcutByPackageName(this, this.getPackageName()); } public void removeShortcutTest(View view) { ShortcutUtils.removeShortcut(this, getShortCutIntent(), mShortcutName); } public void updateShortcutTest(View view) { ShortcutSuperUtils.updateShortcutIcon(this, mShortcutName, getShortCutIntent(), BitmapFactory.decodeResource(getResources(), com.xys.shortcut_lib.R.mipmap.ic_launcher)); } public void toggleFlowEntrance(View view) { FlowEntranceUtil.toggleFlowEntrance(this, ShortcutActivity.class); } private Intent getShortCutIntent() { // 使用MAIN,可以避免部分手机(比如华为、HTC部分机型)删除应用时无法删除快捷方式的问题 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setClass(MainActivity.this, ShortcutActivity.class); return intent; } public void addBadgeInIcon(View view) { // 添加角标测试 // ShortcutBadger.with(getApplicationContext()).count(9); BadgeUtil.setBadgeCount(getApplicationContext(), 4); } public void delBadgeInIcon(View view) { BadgeUtil.resetBadgeCount(getApplicationContext()); } /** * Bug利用测试,请勿滥用 * * @param view view */ public void madMode(View view) { madMode(99); } /** * 清除Bug角标 * * @param view view */ public void cleanMadMode(View view) { madMode(0); } /** * 获取所有App的包名和启动类名 * * @param count count */ private void madMode(int count) { Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.GET_ACTIVITIES); for (int i = 0; i < list.size(); i++) { ActivityInfo activityInfo = list.get(i).activityInfo; String activityName = activityInfo.name; String packageName = activityInfo.applicationInfo.packageName; BadgeUtil.setBadgeOfMadMode(getApplicationContext(), count, packageName, activityName); } } }
角标
/** * 设置Badge 目前支持Launcher: * <p/> * MIUI * Sony * Samsung * LG * HTC * Nova * * @param context context * @param count count */ public static void setBadgeCount(Context context, int count) /** 重置Badge */ public static void resetBadgeCount(Context context)
快速使用shortcut,适配各种ROM的更多相关文章
- Android开发中适配多种 ROM 的快捷方式是如何实现的?
在安卓开发中,要提高开发效率,掌握一些快捷方式是必不可少的,特别是对于android入门阶段的童鞋而言,非常重要.今天小编在安卓开发教程网站上,搜罗了一些常用的Android 适配多种 ROM 的快捷 ...
- 【大盛】全网首发HTC One/M7 最新本地化TrickDroid9.0/固件升级/永久root/高级,快速设置/稳定,流畅经典ROM
了解更多请关注:点击打开链接 ROM版本 HTC One/M7_TrickDroid9.0.0 ROM作者 雪狼团队-大盛 http://weibo.com/DaShengdd Android版本 ...
- Android 适配多种ROM的快捷方式
快捷方式 应该来说 很多人都做过,我们就来看一下基本的快捷方式 是怎么实现的,会有什么问题? 首先 肯定要获取权限: <!-- 添加快捷方式 --> <uses-permission ...
- 两分钟让你明白cocos2dx的屏幕适配策略
闲来无事,整理了一下cocos2dx的屏幕适配策略,本文适用于想快速理解cocos2dx适配的开发者. 我们先假设:以854 * 480 的屏幕为标准进行开发,当然,这也就是cocos2dx所说的设计 ...
- MSM8909中LK阶段LCM屏适配与显示流程分析(一)
1.前言 在驱动开发中,我们往往需要适配一些新的屏幕或者调试一些屏幕的参数等,对于Qualcomm的MSM8909这款SoC,当启动Android系统时,会有一个LK阶段,该阶段用来启动Linux内核 ...
- Android 实用开源控件
图片放大缩小: PinchImageView 体验最好的图片手势控件,不同分辨率无缝切换,可与ViewPager结合使用. GestureViews 带有手势控制的ImageView和FrameLay ...
- Toast与Snackbar的那点事
背景 Toast是Android平台上的常用技术.从用户角度来看,Toast是用户与App交互最基本的提示控件:从开发者角度来看,Toast是开发过程中常用的调试手段之一.此外,Toast语法也非常简 ...
- Boostrap
基本认知: Boostrap绝对是目前最流行用得最广泛的一款框架.它是一套优美,直观并且给力的web设计工具包,可以用来开发跨浏览器兼容并且美观大气的页面. Bootstrap的优缺点: 缺点: 1. ...
- 关于web开发前端h5框架的选择
关于web开发前端h5框架的选择 看了很多移动版框架都是基于app混合式开发的,不是单独h5网站的基于h5开发的web框架从组件丰富度,兼容性,相关教程来说bootstrap还是最好的react和vu ...
随机推荐
- sql 汉字转首字母拼音
从网络上收刮了一些,以备后用 create function fun_getPY(@str nvarchar()) returns nvarchar() as begin declare @word ...
- indexof()方法
w3c手册定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置 stringObject.indexOf(searchvalue,fromindex) searchva ...
- apache 上配置多个django工程
我的环境是win7+python2.7.8+django1.6.4+apache2.2 废话不多说,直接进入正题: 下载对应的版本的mod_wsgi.so 第一步:添加mod_wsgi.so(记得对应 ...
- 反射-b
Class pkClass=NSClassFromString(@"PKAddPassesViewController"); if (pkClass) { NS ...
- Java对象引用
1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...
- Nginx系列~概念与windows下环境搭建
概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sys ...
- 【转】 Linux中的工作队列
原文网址:http://blog.chinaunix.net/uid-20583479-id-1920134.html 工作队列一般用来做滞后的工作,比如在中断里面要做很多事,但是比较耗时,这时就可以 ...
- winform调用WCF默认实例
一:截图 二:调用代码 using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...
- C#文本转语音并保存wav和MP3文件
回顾上次写博客至今都有4个多月了,最近工作比较的忙没时间写博文.以后会多坚持写博文,与大家分享下最近遇到的问题.最近因为项目需要,研究了下用C#开发TTS.下面把大体的思路给大家说说,希望对大家有所帮 ...
- 4Sum——LeetCode
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...