Android之添加快捷方式(Shortcut)到手机桌面
来源:互联网 发布:广电网络机顶盒安装app 编辑:程序博客网 时间:2024/04/29 20:01
在两个手机上测试,发现小米手机上添加了快捷方式后不能移除,三星手机可以。权限
要在手机桌面上添加快捷方式,首先需要在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";
<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22.5px;"> 添加快捷方式:</span>
<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 15px; line-height: 22.5px;"></span><pre name="code" class="html"> 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); }或者用xml文件来配置
<pre name="code" class="html" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25.2px;"><?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2009 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.--><favorites xmlns:launcher="http://schemas.android.com/apk/res-auto"> <!-- screen [0] --> <!-- 内部小部件使用uri域(对应数据库中的intent)保存Widget名称 --> <simple_widget launcher:uri="com.sangfor.widget.Clock" launcher:screen="0" launcher:x="0" launcher:y="0" launcher:spanX="4" launcher:spanY="1" launcher:movable="false" /> <simple_widget launcher:uri="com.sangfor.widget.Tips" launcher:screen="0" launcher:x="0" launcher:y="1" launcher:spanX="4" launcher:spanY="1" launcher:movable="false" /> <shortcut launcher:uri="#Intent;action=com.sangfor.action.ACTION_EXIT_SECURE_WORKSPACE;launchFlags=0x10200000;component=com.sangfor.vpn.client.awork/com.sangfor.vpn.client.launcher.HandlerActivity;end" launcher:iconRes="@drawable/ic_exit_secure_workspace" launcher:titleRes="@string/exit_secure_workspace" launcher:container="-100" launcher:screen="0" launcher:x="0" launcher:y="2" launcher:deletable="false" /> <shortcut launcher:uri="#Intent;action=android.intent.action.MAIN;launchFlags=0x10200000;component=com.sangfor.vpn.client.awork/com.sangfor.vpn.client.phone.appstore.AppStoreActivity;end" launcher:iconRes="@drawable/ic_appstore" launcher:titleRes="@string/appstore_title" launcher:container="-100" launcher:screen="0" launcher:x="1" launcher:y="2" launcher:deletable="false" /> <!-- Hotseat (We use the screen as the position of the item in the hotseat) --> <resolve launcher:container="-101" launcher:screen="0" launcher:x="0" launcher:y="0" launcher:iconRes="@drawable/ic_dialer_app" launcher:titleRes="@string/dial_shortcut_title" launcher:deletable="false"> <favorite launcher:uri="#Intent;action=android.intent.action.DIAL;end" /> <favorite launcher:uri="tel:123" /> <favorite launcher:uri="#Intent;action=android.intent.action.CALL_BUTTON;end" /> <favorite launcher:packageName="com.android.dialer" launcher:className="com.android.dialer.DialtactsActivity" /> </resolve> <resolve launcher:container="-101" launcher:screen="1" launcher:x="1" launcher:y="0" launcher:iconRes="@drawable/ic_contacts_app" launcher:titleRes="@string/contacts_shortcut_title" launcher:deletable="false"> <favorite launcher:uri="content://contacts/people" /> </resolve> <resolve launcher:container="-101" launcher:screen="2" launcher:x="2" launcher:y="0" launcher:iconRes="@drawable/ic_sms_app" launcher:titleRes="@string/sms_shortcut_title" launcher:deletable="false"> <favorite launcher:uri="#Intent;action=android.intent.action.MAIN;category=android.intent.category.APP_MESSAGING;end" /> <favorite launcher:packageName="com.android.contacts" launcher:className="com.android.mms.ui.ComposeMessageActivity" /> <favorite launcher:uri="sms:" /> <favorite launcher:uri="smsto:" /> <favorite launcher:uri="mms:" /> <favorite launcher:uri="mmsto:" /> <favorite launcher:packageName="com.android.mms" launcher:className="com.android.mms.ui.ConversationList" /> </resolve> <shortcut launcher:uri="#Intent;action=com.sangfor.action.ACTION_OPEN_CONSOLE_SETTINGS;category=android.intent.category.DEFAULT;end" launcher:iconRes="@drawable/ic_setting_app" launcher:titleRes="@string/setting_shortcut_title" launcher:container="-101" launcher:screen="3" launcher:x="3" launcher:y="0" launcher:deletable="false" /></favorites>
移除快捷方式
移除快捷方式的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; }
参考资料1:http://www.cnblogs.com/felix-hua/archive/2011/12/30/2307199.html
参考资料2:http://www.cnblogs.com/felix-hua/archive/2011/12/30/2307327.html
参考资料3:http://blog.csdn.net/error/404.html?from=http://blog.csdn.net/ldj299/article/details/6298452
参考资料4:http://www.cnblogs.com/CoolPigs/p/3317234.html
</pre><pre code_snippet_id="1583491" snippet_file_name="blog_20160220_11_9472260" name="code" class="html" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 25.2px;">
1 0
- Android添加快捷方式(ShortCut)到手机桌面
- Android添加快捷方式(Shortcut)到手机桌面
- Android之添加快捷方式(Shortcut)到手机桌面
- Android添加快捷方式(Short)到手机桌面
- Android添加快捷方式(Short)到手机桌面
- Android添加快捷方式(Short)到手机桌面
- Android添加快捷方式(Short)到手机桌面
- Android添加快捷方式(Short)到手机桌面
- Android添加快捷方式(CutShort)到手机桌面
- Android添加快捷方式(Short)到手机桌面
- Android添加快捷方式(Short)到手机桌面
- 9、Android添加快捷方式(Short)到手机桌面
- android 添加快捷方式到桌面
- Android桌面组件widget与快捷方式shortcut
- Android 添加App快捷方式到桌面
- Android 手机桌面快捷方式
- Android开发之向桌面添加快捷方式
- Android开发之向桌面添加快捷方式
- Android native Thread实现 和Java Thread区别
- ssh 执行远程操作
- Android studio 设置注释模板以及函数注释快捷键
- HDOJ -1203 I NEED A OFFER!
- 传递指向指针的引用
- Android之添加快捷方式(Shortcut)到手机桌面
- 接口和抽象类的区别
- OC(Objective-C)中的KVC
- Gson的使用
- HDU 5631 Rikka with Graph
- Java占据主要地位的原因
- windows基础编程----第二篇(创建属于自己的窗口)
- 阿里云配置日记
- Spark培训之计算员工薪资