在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名。当卸载程序时系统发android.intent.action.PACKAGE_REMOVED广播。同样intent.getDataString()获得所卸载的包名。
应用程序无法监听自己的安装与卸载,但覆盖安装可以监听到自己的android.intent.action.PACKAGE_REMOVED广播。
应用程序无法监听自己的安装与卸载,但覆盖安装可以监听到自己的android.intent.action.PACKAGE_REMOVED广播。
-
<?xml version="1.0" encoding="utf-8"?>
-
<manifest
-
xmlns:android="http://schemas.android.com/apk/res/android"
-
package="com.test"
-
android:versionCode="1"
-
android:versionName="1.0">
-
<application
-
android:icon="@drawable/icon"
-
android:label="测试">
-
<receiver android:name=".PackageReceiver"
-
android:label="@string/app_name">
-
<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>
-
<uses-sdk android:minSdkVersion="7" />
-
<uses-permission android:name="android.permission.INTERNET" />
-
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
-
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- </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 |
|
} |