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

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>

 

posted @ 2016-03-11 11:39  星辰之力  阅读(649)  评论(0编辑  收藏  举报