android 在清除应用数据后,会重复生成shortcut
来源:互联网 发布:爱宝v6软件 编辑:程序博客网 时间:2024/05/17 09:04
最近测试发现一个bug,在应用程序信息页面,点击清除数据后,然后打开该应用,发现桌面又创建了一个shortcut,很显然shortcut重复了。于是赶紧去分析bug产生的原因:我们的应用程序主页会有一个判断ShortCutFlag的过程,如果返回false,则会创建。而ShortCutFlag是记录在SharedPreferences中,清除应用数据时,也会把SharedPreferences清除,导致会重复创建shortcut,而此时系统应该能够判断是否已创建,我们是否有参数来设置不允许重复创建shortcut呢,创建shortcut的代码如下
public static void addShortcut(Context cx) { Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); Intent shortcutIntent = cx.getPackageManager().getLaunchIntentForPackage(cx.getPackageName()); shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); String title = null; try { final PackageManager pm = cx.getPackageManager(); title = pm.getApplicationLabel(pm.getApplicationInfo(cx.getPackageName(),PackageManager.GET_META_DATA)).toString(); } catch (Exception e) { } shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); shortcut.putExtra("duplicate", false); Parcelable iconResource = Intent.ShortcutIconResource.fromContext(cx,R.drawable.ic_launcher); shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); cx.sendBroadcast(shortcut);}
其中shortcut.putExtra("duplicate", false) 就设置不允许重复,似乎没起作用。多调用cx.sendBroadcast(shortcut)几次就会出现多生成几个shortcut。
于是只能寻找其他办法来判断是否已生成shortcut,经过测试以下方法有效
1.修改addShortCut
public static void addShortcut(Context cx) { String title = null; try { final PackageManager pm = cx.getPackageManager(); title = pm.getApplicationLabel(pm.getApplicationInfo(cx.getPackageName(),PackageManager.GET_META_DATA)).toString(); } catch (Exception e) { } if(hasShortcut(cx ,title)){ return; }else { Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); Intent shortcutIntent = cx.getPackageManager().getLaunchIntentForPackage(cx.getPackageName()); shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); shortcut.putExtra("duplicate", false); Parcelable iconResource = Intent.ShortcutIconResource.fromContext(cx, R.drawable.ic_launcher); shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource); cx.sendBroadcast(shortcut); } }2.增加hasShortCut来判断是否创建已创建shortcut
private static boolean hasShortcut(Context context,String shortcutName){ String url = ""; int systemversion = Build.VERSION.SDK_INT; /*大于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"; } try { ContentResolver resolver = context.getContentResolver(); Cursor cursor = resolver.query(Uri.parse(url), null, "title=?", new String[]{shortcutName}, null); if (cursor != null && cursor.moveToFirst()) { cursor.close(); return true; } }catch (Exception e) { } return false; }
注: 需要增加<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
否则“Cursor cursor = resolver.query(Uri.parse(url), null, "title=?",new String[] {shortcutName}, null)”
会卡住。。。
注: 可以让addShortCut在单独的线程中执行。
0 0
- android 在清除应用数据后,会重复生成shortcut
- android 中清除应用的数据会清除哪些数据
- android 中清除应用的数据会清除哪些数据
- android 清除其他应用数据
- Android清除应用缓存数据
- android清除应用缓存数据
- android应用数据清除管理器
- Android O :清除应用数据
- 清除数据库重复数据
- 清除数据库重复数据
- MongoDB 清除重复数据
- android点击Home键后,在打开应用,应用会重新启动,而不是恢复到原来状态
- android点击Home键后,在打开应用,应用会重新启动,而不是恢复到原来状态
- android退出应用时候清除数据
- Android本应用数据清除管理器
- 获取应用Shortcut在Launcher坐标信息
- Android中系统设置中的清除数据究竟会清除哪些数据
- 【Android开发技巧】 - 如何获取应用Shortcut在Launcher坐标信息
- oauth 验证码登陆
- Android AM命令行启动程序的方法
- opencv_highgui.lib(window_w32.obj) : error LNK2019: unresolved external symbol __imp__CreateToolbarE
- 和陆琪一起侃一侃在这个看脸的世界,容貌改变命运
- [VIP会员购]卖家报名
- android 在清除应用数据后,会重复生成shortcut
- Memcache知识点梳理
- 第二章知识结构导图
- 第十八章 18.1.2节练习
- C++接口定义及实现举例
- 异步处理任务框架
- 矩阵开方sqrt()和sqrtm()的区别
- 经典SQL语句
- 分类算法之朴素贝叶斯——简单天气预报算法