程序监听本身被卸载后自动删除快捷方式?| 判定快捷方式已存在
2011-05-28 10:48
183 查看
当程序安装/卸载时,会发出PACKAGE_ADDED/PACKAGE_REMOVED广播,按理只要应用程序监听这样的广播,就能在收到相应广播时触发相应处理(例如,添加/删除 桌面快捷方式)。事实验证,这个是完全可以实现的。
但是,如果是由应用程序进行这些广播的监听,同时,又卸载自身,那能否收到相应广播并触发相应处理呢?实验证明行不通。
自身已经被卸载了,无法自救!! 如果还有其他方法盼赐教,无限期待。
HL耐心研究了这个许久,还说一定要把它实现。后生可畏呢。
为客户服务就不要顶着一个技术至上的大帽子,踏踏实实做好每个细节。 :)
创建成功,如果该快捷方式已经存在,也会有Toast提示
已存在。若每次进入程序时都执行如下代码,就每次都有Toast提示出现,频繁地出现打扰了用户
。
所以,在决定是否执行以上代码之前就添加是否存在该快捷方式的判定
,如果没有该快捷方式,就发出广播告诉Laucher创建快捷方式(会弹窗一次Toast),如果该快捷方式已经存在,则不需执行该代码去创建,当然也就不会出现Toast了。
判定是否存在该快捷方式,需要权限:
但是,如果是由应用程序进行这些广播的监听,同时,又卸载自身,那能否收到相应广播并触发相应处理呢?实验证明行不通。
自身已经被卸载了,无法自救!! 如果还有其他方法盼赐教,无限期待。
HL耐心研究了这个许久,还说一定要把它实现。后生可畏呢。
为客户服务就不要顶着一个技术至上的大帽子,踏踏实实做好每个细节。 :)
public class installReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) { Toast.makeText(context, "有应用被添加", Toast.LENGTH_LONG).show(); } else if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) { Toast.makeText(context, "有应用被删除", Toast.LENGTH_LONG).show(); } else if (Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())) { Toast.makeText(context, "有应用被替换", Toast.LENGTH_LONG).show(); } } }
<receiver android:name=".installReceiver" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED"></action> <action android:name="android.intent.action.PACKAGE_REMOVED"></action> <action android:name="android.intent.action.PACKAGE_REPLACED"></action> <data android:scheme="package"></data> </intent-filter> </receiver>
判定快捷方式已存在
通过发送广播给Launcher创建桌面快捷方式,Laucher收到该广播创建快捷方式后会有Toast提示创建成功,如果该快捷方式已经存在,也会有Toast提示
已存在。若每次进入程序时都执行如下代码,就每次都有Toast提示出现,频繁地出现打扰了用户
。
private void addSelfShortcut() { if(!judgeShoutcutInstalled(this)) { Intent shortcut = new Intent(SHORTCUT_INSTALL); // 显示的名字 shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getResources().getString(R.string.app_name)); // 显示的图标 Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon); shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); // 不允许重复创建 shortcut.putExtra("duplicate", false); // 这个是快捷方式所实现的功能 Intent intent = new Intent(this, Shutcut.class); shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); // 发送广播用以创建shortcut this.sendBroadcast(shortcut); }
所以,在决定是否执行以上代码之前就添加是否存在该快捷方式的判定
,如果没有该快捷方式,就发出广播告诉Laucher创建快捷方式(会弹窗一次Toast),如果该快捷方式已经存在,则不需执行该代码去创建,当然也就不会出现Toast了。
private boolean judgeShoutcutInstalled (Context context){ boolean isInstallShortcut = false ; final ContentResolver cr = context.getContentResolver(); final String AUTHORITY = "com.android.launcher.settings"; final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true"); Cursor c = cr.query(CONTENT_URI, new String[] {"title","iconResource" }, "title=?", new String[] {getResources().getString(R.string.app_name) }, null);//XXX表示应用名称。 if(c!=null && c.getCount()>0){ isInstallShortcut = true ; }
判定是否存在该快捷方式,需要权限:
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"></uses-permission>
相关文章推荐
- 程序监听本身被卸载后自动删除快捷方式?| 判定快捷方式已存在
- android程序卸载后无法删除桌面快捷方式的解决办法
- Android 为应用创建多个桌面快捷方式,可在卸载时自动删除桌面快捷方式
- android程序卸载后无法删除桌面快捷方式的解决办法
- android程序卸载后无法删除桌面快捷方式的解决办法
- android程序卸载后无法删除桌面快捷方式的解决办法
- InstallShield 为卸载程序添加快捷方式
- Android 关于快捷方式的总结(创建、删除、判断是否存在和跳转)
- android点滴(24)之android 创建、删除、判断是否存在快捷方式
- VS2008 c# 创建快捷方式 卸载程序
- java实现软件程序开机自动启动和创建程序的桌面快捷方式源代码
- android 快捷方式开发(三)通过程序运行时自动创建
- NSIS不能删除其打包的程序桌面快捷方式的解决方式
- Android应用程序快捷方式操作(添加,删除,判断是否存在)
- InstallShield学习笔记(3)-建立卸载程序的快捷方式
- dotnet程序安装包添加卸载快捷方式
- .net 程序安装包卸载快捷方式
- 三星 Galaxy Nexus,4.0.3/华为荣耀U8860 从程序自动创建快捷方式进入报 [没有找到Activity]
- Android 程序桌面快捷方式的检测、添加和删除相关网址
- 应23code群友:特写上我自己的代码:android程序快捷方式的创建与删除