Android添加快捷方式(Short)到手机桌面

权限

  要在手机桌面上添加快捷方式,首先需要在manifest中添加权限。

    <!-- 添加快捷方式 -->    <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" />

添加快捷方式

  添加快捷方式,是向桌面应用(launcher)发送相关action的广播,相关的action如下:

  public static final String ACTION_ADD_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";

  添加快捷方式:

    private void addShortcut(String name) {        Intent addShortcutIntent = new Intent(ACTION_ADD_SHORTCUT);        // 不允许重复创建        addShortcutIntent.putExtra("duplicate", false);// 经测试不是根据快捷方式的名字判断重复的        // 应该是根据快链的Intent来判断是否重复的,即Intent.EXTRA_SHORTCUT_INTENT字段的value        // 但是名称不同时,虽然有的手机系统会显示Toast提示重复,仍然会建立快链        // 屏幕上没有空间时会提示        // 注意:重复创建的行为MIUI和三星手机上不太一样,小米上似乎不能重复创建快捷方式        // 名字        addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);        // 图标        addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,                Intent.ShortcutIconResource.fromContext(MainActivity.this,                        R.drawable.ic_launcher));        // 设置关联程序        Intent launcherIntent = new Intent(Intent.ACTION_MAIN);        launcherIntent.setClass(MainActivity.this, MainActivity.class);        launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);        addShortcutIntent                .putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);        // 发送广播        sendBroadcast(addShortcutIntent);    }

移除快捷方式

  移除快捷方式的action:

public static final String ACTION_REMOVE_SHORTCUT = "com.android.launcher.action.UNINSTALL_SHORTCUT";

  移除快捷方式的方法:

    private void removeShortcut(String name) {        // remove shortcut的方法在小米系统上不管用,在三星上可以移除        Intent intent = new Intent(ACTION_REMOVE_SHORTCUT);        // 名字        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);        // 设置关联程序        Intent launcherIntent = new Intent(MainActivity.this,                MainActivity.class).setAction(Intent.ACTION_MAIN);        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);        // 发送广播        sendBroadcast(intent);    }

  在两个手机上测试,发现小米手机上添加了快捷方式后不能移除,三星手机可以。

查询快捷方式

  查询快捷方式是否存在的方法是从网上其他资料那里查来的,但是测试查询的时候失败了,两个手机(小米、三星)都查不到。

  先留着代码以后看看是什么原因吧:

    private boolean hasInstallShortcut(String name) {        boolean hasInstall = false;        final String AUTHORITY = "com.android.launcher2.settings";        Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY                + "/favorites?notify=true");        // 这里总是failed to find provider info        // com.android.launcher2.settings和com.android.launcher.settings都不行        Cursor cursor = this.getContentResolver().query(CONTENT_URI,                new String[] { "title", "iconResource" }, "title=?",                new String[] { name }, null);        if (cursor != null && cursor.getCount() > 0) {            hasInstall = true;        }        return hasInstall;    }

参考资料

  Android之生成桌面快捷方式(一)

  Android之生成桌面快捷方式(二)

  http://blog.csdn.net/ldj299/article/details/6298452

  http://www.xmumu.com/post/2012-04-01/17357119

  http://www.cnblogs.com/CoolPigs/p/3317234.html

更多相关文章

  1. Android(安卓)带图标的textview
  2. 点击LinearLayout使用selector改变TextView字体颜色
  3. 改变android程序head样式
  4. android 底部Tab添加水波纹效果
  5. Android开发者的Air For Android简单入门
  6. Android(安卓)studio上设置状态栏为透明 Android5.0
  7. Android设置对话框去除黑边
  8. Android(安卓)使用PdfDocument生成PDF文件及遇到的问题
  9. android framework java层服务 分析

随机推荐

  1. 一套有效应对技术面算法题的方法论
  2. Apache服务器是如何解析PHP 小编来给你解
  3. 2021年校招程序员之阿里的十轮面试问题真
  4. PHP高并发高可用系统以及面试分析
  5. Python(十)文件操作
  6. Linux SRE 必经之路
  7. 怎么画人物的眼睛?画漫画人物的眼睛画法
  8. 探索 .NET Core的依赖注入
  9. Diem协会高管:Novi钱包如何修复全球支离破
  10. 完整版Java零基础自学教程+笔记+源码分享