程序监听本身被卸载后自动删除快捷方式?| 判定快捷方式已存在

程序监听本身被卸载后自动删除快捷方式?| 判定快捷方式已存在 收藏

      当程序安装/卸载时,会发出PACKAGE_ADDED/PACKAGE_REMOVED广播,按理只要应用程序监听这样的广播,就能在收到相应广播时触发相应处理(例如,添加/删除 桌面快捷方式)。事实验证,这个是完全可以实现的。

      但是,如果是由应用程序进行这些广播的监听,同时,又卸载自身,那能否收到相应广播并触发相应处理呢?实验证明行不通。 自身已经被卸载了,无法自救!! 如果还有其他方法盼赐教,无限期待。

      HL耐心研究了这个许久,还说一定要把它实现。后生可畏呢。

    为客户服务就不要顶着一个技术至上的大帽子,踏踏实实做好每个细节。 :)

  

  1. public class installReceiver extends BroadcastReceiver {  
  2.     @Override  
  3.     public void onReceive(Context context, Intent intent) {  
  4.         if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())) {  
  5.             Toast.makeText(context, "有应用被添加", Toast.LENGTH_LONG).show();  
  6.         } else if (Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())) {  
  7.             Toast.makeText(context, "有应用被删除", Toast.LENGTH_LONG).show();  
  8.         } else if (Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())) {  
  9.             Toast.makeText(context, "有应用被替换", Toast.LENGTH_LONG).show();  
  10.         }  
  11.     }  
  12. }  

 

  

  1. <receiver android:name=".installReceiver" android:enabled="true">  
  2.     <intent-filter>  
  3.         <action android:name="android.intent.action.PACKAGE_ADDED"></action>  
  4.         <action android:name="android.intent.action.PACKAGE_REMOVED"></action>  
  5.         <action android:name="android.intent.action.PACKAGE_REPLACED"></action>  
  6.         <data android:scheme="package"></data>  
  7.     </intent-filter>  
  8. </receiver>  

 

判定快捷方式已存在

通过发送广播给Launcher创建桌面快捷方式,Laucher收到该广播创建快捷方式后会有Toast提示 创建成功,如果该快捷方式已经存在,也会有Toast提示 已存在。若每次进入程序时都执行如下代码,就每次都有Toast提示出现,频繁地出现打扰了用户 

 

  1. private void addSelfShortcut() {  
  2.     if(!judgeShoutcutInstalled(this))  
  3.     {  
  4.         Intent shortcut = new Intent(SHORTCUT_INSTALL);  
  5.         // 显示的名字  
  6.         shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getResources().getString(R.string.app_name));  
  7.         // 显示的图标  
  8.         Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);  
  9.         shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);  
  10.         // 不允许重复创建  
  11.         shortcut.putExtra("duplicate"false);  
  12.           
  13.         // 这个是快捷方式所实现的功能  
  14.         Intent intent = new Intent(this, Shutcut.class);  
  15.         shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);  
  16.         // 发送广播用以创建shortcut  
  17.         this.sendBroadcast(shortcut);    
  18.     }  

 

所以,在决定是否执行以上代码之前就添加是否存在该快捷方式的判定 ,如果没有该快捷方式,就发出广播告诉Laucher创建快捷方式(会弹窗一次Toast),如果该快捷方式已经存在,则不需执行该代码去创建,当然也就不会出现Toast了。

 

  1. private boolean judgeShoutcutInstalled (Context context){  
  2.        boolean isInstallShortcut = false ;    
  3.        final ContentResolver cr = context.getContentResolver();    
  4.        final String AUTHORITY = "com.android.launcher.settings";    
  5.        final Uri CONTENT_URI = Uri.parse("content://" +    
  6.                         AUTHORITY + "/favorites?notify=true");    
  7.            
  8.        Cursor c = cr.query(CONTENT_URI,    
  9.        new String[] {"title","iconResource" },    
  10.        "title=?",    
  11.        new String[] {getResources().getString(R.string.app_name) }, null);//XXX表示应用名称。    
  12.                if(c!=null && c.getCount()>0){    
  13.            isInstallShortcut = true ;    
  14.        }    

 

判定是否存在该快捷方式,需要权限:

 

  1. <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"></uses-permission>  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值