Android监听程序的安装和卸载

在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名。当卸载程序时系统发android.intent.action.PACKAGE_REMOVED广播。同样intent.getDataString()获得所卸载的包名。

应用程序无法监听自己的安装与卸载,但覆盖安装可以监听到自己的android.intent.action.PACKAGE_REMOVED广播。
  1. public class PackageReceiver extends BroadcastReceiver{
  2. @Override
  3.     public void onReceive(Context context, Intent intent) {        
  4.         if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
  5.             String packageName = intent.getDataString();
  6.             Log.i("Test","---------------" + packageName);
  7.         }
  8.         
  9.         if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
  10.          String packageName = intent.getDataString();
  11.           Log.i("Test","---------------" + "PACKAGE_REMOVED" + packageName);
  12.         }
  13. }
  14. }
复制代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest
  3.    xmlns:android="http://schemas.android.com/apk/res/android"
  4.     package="com.test"
  5.     android:versionCode="1"
  6.     android:versionName="1.0">
  7.     <application
  8.      android:icon="@drawable/icon"
  9.      android:label="测试">
  10.         <receiver android:name=".PackageReceiver"
  11.                   android:label="@string/app_name">
  12.             <intent-filter>
  13.               <action android:name="android.intent.action.PACKAGE_ADDED" />
  14.               <action android:name="android.intent.action.PACKAGE_REMOVED" />
  15.                <data android:scheme="package" />
  16.             </intent-filter>
  17.         </receiver>
  18.     </application>
  19.     <uses-sdk android:minSdkVersion="7" />
  20.    <uses-permission android:name="android.permission.INTERNET" />
  21.     <uses-permission android:name="android.permission.RESTART_PACKAGES"/>
  22.     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  23. </manifest>



这里是手动注册广播
public class GetBroadcast extends BroadcastReceiver {
02  
03 private static GetBroadcast mReceiver = new GetBroadcast();
04 private static IntentFilter mIntentFilter;
05  
06  
07 public static void registerReceiver(Context context) {
08 mIntentFilter = new IntentFilter();
09 mIntentFilter.addDataScheme("package");
10 mIntentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
11 mIntentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
12 mIntentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
13 context.registerReceiver(mReceiver, mIntentFilter);
14 }
15  
16 public static void unregisterReceiver(Context context) {
17 context.unregisterReceiver(mReceiver);
18 }
19  
20 @Override
21 public void onReceive(Context context, Intent intent) {
22 String action = intent.getAction();
23 if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
24 Toast.makeText(context, "有应用被添加", Toast.LENGTH_LONG).show();
25 else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
26 Toast.makeText(context, "有应用被删除", Toast.LENGTH_LONG).show();
27 }
28  
29 /*
30 * else if(Intent.ACTION_PACKAGE_CHANGED.equals(action)){
31 * Toast.makeText(context, "有应用被改变", Toast.LENGTH_LONG).show(); }
32 */
33  
34 else if (Intent.ACTION_PACKAGE_REPLACED.equals(action)) {
35 Toast.makeText(context, "有应用被替换", Toast.LENGTH_LONG).show();
36 }
37  
38 /*
39 * else if(Intent.ACTION_PACKAGE_RESTARTED.equals(action)){
40 * Toast.makeText(context, "有应用被重启", Toast.LENGTH_LONG).show(); }
41 */
42  
43 /*
44 * else if(Intent.ACTION_PACKAGE_INSTALL.equals(action)){
45 * Toast.makeText(context, "有应用被安装", Toast.LENGTH_LONG).show(); }
46 */
47 }
48  

}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值