Android利用广播监听设备安装和卸载应用程序

jopen 11年前

MainActivity如下:

    package cn.testappaddandremove;                import android.os.Bundle;        import android.app.Activity;        import android.content.IntentFilter;        /**        * Demo描述:        * 利用广播监听设备安装和卸载应用程序        *         * 参考资料:        * http://blog.csdn.net/wangjinyu501/article/details/9664315        * Thank you very much        */        public class MainActivity extends Activity {            private AppBroadcastReceiver mAppBroadcastReceiver;            @Override            protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                setContentView(R.layout.main);            }            @Override            protected void onStart() {                super.onStart();        //      //方式一:在代码中设置IntentFilter        //      mAppBroadcastReceiver=new AppBroadcastReceiver();        //      IntentFilter intentFilter=new IntentFilter();        //      intentFilter.addAction("android.intent.action.PACKAGE_ADDED");        //      intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");        //      intentFilter.addDataScheme("package");        //      this.registerReceiver(mAppBroadcastReceiver, intentFilter);                                //方式二:在Manifest.xml中设置IntentFilter                //       测试发现方式二效果更好些                mAppBroadcastReceiver=new AppBroadcastReceiver();                IntentFilter intentFilter=new IntentFilter();                this.registerReceiver(mAppBroadcastReceiver,intentFilter);            }            @Override            protected void onDestroy() {                if (mAppBroadcastReceiver!=null) {                    this.unregisterReceiver(mAppBroadcastReceiver);                }                super.onDestroy();            }        }  
AppBroadcastReceiver如下:
    package cn.testappaddandremove;                import android.content.BroadcastReceiver;        import android.content.Context;        import android.content.Intent;                public class AppBroadcastReceiver extends BroadcastReceiver {            private final String ADD_APP ="android.intent.action.PACKAGE_ADDED";            private final String REMOVE_APP ="android.intent.action.PACKAGE_REMOVED";            @Override            public void onReceive(Context context, Intent intent) {                String action=intent.getAction();                if (ADD_APP.equals(action)) {                    String packageName=intent.getDataString();                    System.out.println("安装了:"+packageName);                }                if (REMOVE_APP.equals(action)) {                    String packageName=intent.getDataString();                    System.out.println("卸载了:"+packageName);                }            }                }  
Manifest.xml如下:
    <?xml version="1.0" encoding="utf-8"?>        <manifest xmlns:android="http://schemas.android.com/apk/res/android"            package="cn.testappaddandremove"            android:versionCode="1"            android:versionName="1.0" >                    <uses-sdk                android:minSdkVersion="8"                android:targetSdkVersion="8" />                    <application                android:allowBackup="true"                android:icon="@drawable/ic_launcher"                android:label="@string/app_name"                android:theme="@style/AppTheme" >                <activity                    android:name="cn.testappaddandremove.MainActivity"                    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="cn.testappaddandremove.AppBroadcastReceiver">                    <intent-filter >                        <action android:name="android.intent.action.PACKAGE_ADDED" />                          <action android:name="android.intent.action.PACKAGE_REMOVED" />                          <data   android:scheme="package" />                     </intent-filter>                </receiver>                            </application>                </manifest>  
main.xml如下:
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"            xmlns:tools="http://schemas.android.com/tools"            android:layout_width="match_parent"            android:layout_height="match_parent"            >                    <TextView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="监听应用程序的安装和卸载"                android:layout_centerInParent="true"            />                </RelativeLayout>