Android 监控程序安装和删除

openkk 13年前

通过阅读Android SDK里关于intent.action这部分里面的描述,我们可以找到一些与package相关的系统广播

android.intent.action.PACKAGE_ADDED        android.intent.action.PACKAGE_CHANGED        android.intent.action.PACKAGE_DATA_CLEARED        android.intent.action.PACKAGE_INSTALL      android.intent.action.PACKAGE_REMOVED      android.intent.action.PACKAGE_REPLACED        android.intent.action.PACKAGE_RESTARTED  


其中

ACTION_PACKAGE_ADDED

在SDK里的描述是  

Broadcast Action: A new application package has been installed on the device.

ACTION_PACKAGE_REMOVED

在SDK里的描述是

Broadcast Action: An existing application package has been removed from the device.

ACTION_PACKAGE_REPLACED

在SDK里的描述是

Broadcast Action: A new version of an application package has been installed, replacing an existing version that was previously installed.

 

通过这三个广播消息 我们已经可以监控到Android 应用程序的安装和删除

package zy.Broadcast;    import android.content.BroadcastReceiver;    import android.content.Context;    import android.content.Intent;    import android.widget.Toast;    public class getBroadcast 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_CHANGED.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();                }                   /* else  if(Intent.ACTION_PACKAGE_RESTARTED.equals(intent.getAction())){                       Toast.makeText(context, "有应用被重启", Toast.LENGTH_LONG).show();               }*/                  /*  else  if(Intent.ACTION_PACKAGE_INSTALL.equals(intent.getAction())){                       Toast.makeText(context, "有应用被安装", Toast.LENGTH_LONG).show();               }*/                            }               }  

然后在AndroidManifest.xml中声明这几个Action的<intent-filter>即可在系统里捕获这些广播消息

<?xml version="1.0" encoding="utf-8"?>    <manifest xmlns:android="http://schemas.android.com/apk/res/android"          package="zy.Broadcast"          android:versionCode="1"          android:versionName="1.0">        <application android:icon="@drawable/icon" android:label="@string/app_name">            <activity android:name=".Broadcast"                      android:label="@string/app_name">                <intent-filter>                    <action android:name="android.intent.action.MAIN" />                    <category android:name="android.intent.category.LAUNCHER" />                </intent-filter>            </activity>          <receiver android:name="getBroadcast" android:enabled="true" >             <intent-filter>                 <action android:name="android.intent.action.PACKAGE_ADDED"></action>                 <!-- <action android:name="android.intent.action.PACKAGE_CHANGED"></action>-->                 <action android:name="android.intent.action.PACKAGE_REMOVED"></action>                 <action android:name="android.intent.action.PACKAGE_REPLACED"></action>                 <!-- <action android:name="android.intent.action.PACKAGE_RESTARTED"></action>-->               <!--    <action android:name="android.intent.action.PACKAGE_INSTALL"></action>-->                   <data android:scheme="package"></data>                  </intent-filter>    </receiver>        </application>        <uses-sdk android:minSdkVersion="7" />            </manifest>   


另外得到删除的包名的方法是

ComponentName cn = intent.getComponent() ;  Uri uu= intent.getData() ;  String name = uu.getSchemeSpecificPart();

原文地址:http://blog.csdn.net/Zengyangtech/article/details/5738940