正文  高级教程 > APK程序信息 >

Android开发 监控程序安装和删除

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

通过阅读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();
2

android监听自身被卸载的方法

http://hi.baidu.com/fphone/item/704a640bd435cdfbdce5b017

不推荐使用,费电