为app创建快捷方式

原创 2015年11月18日 11:16:46

最近公司做的项目要为应用添加快捷方式,顺便就看了下,眼下采取广播创建快捷方式最为普遍。

package com.kingnet.gamecenter.util;import java.util.List;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.Intent.ShortcutIconResource;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageManager.NameNotFoundException;import android.content.pm.ProviderInfo;import android.database.Cursor;import android.graphics.drawable.BitmapDrawable;import android.net.Uri;import android.text.TextUtils;/** * 桌面快捷方式有关的工具类 * @author xiaanming * */public class ShortCutUtils {/** * 快捷方式添加的action */private final static String SHORTCUT_ADD_ACTION = "com.android.launcher.action.INSTALL_SHORTCUT";/** * 快捷方式删除的action */private final static String SHORTCUT_DEL_ACTION = "com.android.launcher.action.UNINSTALL_SHORTCUT";/** * 读取数据库需要的权限 */private final static String READ_SETTINGS_PERMISSION = "com.android.launcher.permission.READ_SETTINGS";/** * 添加快捷方式到桌面,添加快捷方式需要添加用户权限 * * @param context 当前的context对象 * @param resourceId 快捷方式的图标资源id */public static void addShortCut(Context context, String name,int resourceId,String activity){Intent shortCutIntent = new Intent(SHORTCUT_ADD_ACTION);//添加快捷方式的名字// 获取当前应用名称String appName = null;try {appName = obtatinAppName(context);} catch (NameNotFoundException e) {e.printStackTrace();}shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);//不允许重复添加shortCutIntent.putExtra("duplicate", false);shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent().setClassName(context,activity).setAction(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER) .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) );//添加快捷方式的图标ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(context, resourceId);shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);context.sendBroadcast(shortCutIntent);}public static void addShortCut(Context context, BitmapDrawable mBitmapDrawable,String name,String activity){Intent shortCutIntent = new Intent(SHORTCUT_ADD_ACTION);//添加快捷方式的名字// 获取当前应用名称String appName = null;try {appName = obtatinAppName(context);} catch (NameNotFoundException e) {e.printStackTrace();}shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);//不允许重复添加shortCutIntent.putExtra("duplicate", false);shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent().setClassName(context,activity).setAction(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER) .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) );// //添加快捷方式的图标shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, mBitmapDrawable.getBitmap());context.sendBroadcast(shortCutIntent);}/** * 删除桌面上的快捷方式,需要添加权限 * * @param context */public static void delShortcut(Context context, Activity activity) {Intent shortcut = new Intent(SHORTCUT_DEL_ACTION);// 获取当前应用名称String appName = null;try {appName = obtatinAppName(context);} catch (NameNotFoundException e) {e.printStackTrace();}// 快捷方式名称shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName);shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setClassName(context.getPackageName(), context.getClass().getName()));context.sendBroadcast(shortcut);}/** * 判断桌面上是否有快捷方式,调用此方法需要添加权限 * * @param context * @return * @throws NameNotFoundException */public static boolean hasShortcut(Context context) {String AUTHORITY = getAuthorityFromPermission(context, READ_SETTINGS_PERMISSION);if (AUTHORITY == null) {return false;}Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true");String appName = null;try {appName = obtatinAppName(context);} catch (NameNotFoundException e) {e.printStackTrace();}Cursor c = context.getContentResolver().query(CONTENT_URI, new String[] { "title" }, "title=?", new String[] { appName },null);if (c != null && c.getCount() > 0) {return true;}return false;}/** * android系统桌面的基本信息由一个launcher.db的Sqlite数据库管理,里面有三张表 * 其中一张表就是favorites。这个db文件一般放在data/data/com.android.launcher(launcher2)文件的databases下 * 但是对于不同的rom会放在不同的地方 * 例如MIUI放在data/data/com.miui.home/databases下面 * htc放在data/data/com.htc.launcher/databases下面 * @param context * @param permission 读取设置的权限 READ_SETTINGS_PERMISSION * @return */private static String getAuthorityFromPermission(Context context, String permission) {if (TextUtils.isEmpty(permission)) {return null;}List packs = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);if (packs == null) {return null;}for (PackageInfo pack : packs) {ProviderInfo[] providers = pack.providers;if (providers != null) {for (ProviderInfo provider : providers) {if (permission.equals(provider.readPermission)|| permission.equals(provider.writePermission)) {return provider.authority;}}}}return null;}/** * 获取应用的名称 * @param context * @return * @throws NameNotFoundException */private static String obtatinAppName(Context context) throws NameNotFoundException{PackageManager packageManager = context.getPackageManager();return packageManager.getApplicationLabel(packageManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA)).toString();}}

Android 快捷方式的创建

一、在日常开发中,我们经常会遇到这样的需求就是网桌面添加快捷方式:常见的快捷方式有两种:一是APP的快捷方式,一是widget插件的快捷方式。下面详细介绍这两种情况的应用:    参考网站:http:...
  • lenmoyouzi
  • lenmoyouzi
  • 2013年11月25日 10:34
  • 16839

App创建快捷方式

/** * 创建快捷方式 */ private void createShortCut() { // 创建快捷方式的Intent Intent shortcutIntent = new Intent(...
  • discover0704
  • discover0704
  • 2015年04月16日 21:31
  • 217

Linux下Eclipse创建快捷方式

[Desktop Entry] Encoding=UTF-8 Name=eclipse Comment=Eclipse IDE Exec=/usr/local/eclipse/eclipse(...
  • qinsihang
  • qinsihang
  • 2014年03月09日 21:12
  • 1058

如何用Delphi创建快捷方式

由于我们是通过OLE Interface实现此功能的,因此在程序单元的uses语句中要加入ComObj、ActiveX和ShlObj这三个单元。  在单元的声明部分加入以下代码: ...
  • luoyanqing119
  • luoyanqing119
  • 2008年04月11日 09:48
  • 806

ubuntu下创建快捷方式的命令:ln

ln --help用法:ln [选项]... [-T] 目标 链接名称 (第一种格式)  或:ln [选项]... 目标               (第二种格式)  或:ln [选项]... 目标....
  • mecho
  • mecho
  • 2009年07月01日 14:40
  • 6215

为APP添加快捷方式

相信大家在使用很多的应用的时候都碰到过这样的一个情景,那就是当我们第一次点击使用这个应用的时候程序会主动的为我们创建一个桌面上的快捷方式,这样的好处是可以让用户更加方便的进入这个应用,省去找的麻烦。有...
  • yangdeli888
  • yangdeli888
  • 2013年05月28日 12:06
  • 4459

在Ubuntu下给PyCharm创建快捷方式

著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:张阳 链接:http://www.zhihu.com/question/19672568/answer/23133070 ...
  • yypsober
  • yypsober
  • 2016年02月22日 17:02
  • 15062

为网页创建快捷方式

维护YH的时候经常遇到这样的问题,用户在桌面添加了登录页面的快捷方式,但是当我双击进入登录页面的时候,却发现里面的验证码信息总是那个,而且怎么登录也登录不进去,我以为是数据库服务器没有打开,但是如果是...
  • wangboxian
  • wangboxian
  • 2012年04月06日 11:00
  • 4879

Android 创建快捷方式

Android 创建快捷方式 ONE Goal, ONE Passion ! 1,查看Launcher源码.找到创建快捷方式的BroadcastReceiver.在清单文件中查看配置的recei...
  • fengltxx
  • fengltxx
  • 2016年08月12日 19:46
  • 846

Android为应用创建快捷方式

一.概述Android 快捷方式是桌面最基本的组件。它用于直接启动某一应用程序的某个组件。先给大家看看添加,检查,删除快捷方式的整个过程的效果图:二.实现下面看看怎么实现: /** *...
  • Small_Lee
  • Small_Lee
  • 2016年01月28日 16:54
  • 348
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:为app创建快捷方式
举报原因:
原因补充:

(最多只允许输入30个字)