当前位置:   article > 正文

Android监听程序的安装和卸载_android.intent.action.package_added

android.intent.action.package_added
在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  

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/153063
推荐阅读
相关标签
  

闽ICP备14008679号