当前位置: 代码迷 >> Android >> Android 监控程序装配和删除的实现
  详细解决方案

Android 监控程序装配和删除的实现

热度:19   发布时间:2016-05-01 19:12:50.0
Android 监控程序安装和删除的实现

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

  1. android.intent.action.PACKAGE_ADDED???????
  2. android.intent.action.PACKAGE_CHANGED???????
  3. android.intent.action.PACKAGE_DATA_CLEARED???????
  4. android.intent.action.PACKAGE_INSTALL?????
  5. android.intent.action.PACKAGE_REMOVED?????
  6. android.intent.action.PACKAGE_REPLACED???????
  7. 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 应用程序的安装和删除

详细的实现代码如下:

  1. package?zy.Broadcast;???
  2. import?android.content.BroadcastReceiver;???
  3. import?android.content.Context;???
  4. import?android.content.Intent;???
  5. import?android.widget.Toast;???
  6. public?class?getBroadcast?extends?BroadcastReceiver?{???
  7. ????????@Override???
  8. ????????public?void?onReceive(Context?context,?Intent?intent)?{???
  9. ??????????????????
  10. ??????????????????if(Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())){???
  11. ????????????????????Toast.makeText(context,?"有应用被添加",?Toast.LENGTH_LONG).show();???
  12. ????????????}???
  13. ????????????????else??if(Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())){???
  14. ????????????????????Toast.makeText(context,?"有应用被删除",?Toast.LENGTH_LONG).show();???
  15. ????????????}???
  16. ?????????????/*???else??if(Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction())){??
  17. ????????????????????Toast.makeText(context,?"有应用被改变",?Toast.LENGTH_LONG).show();??
  18. ????????????}*/???
  19. ????????????????else??if(Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())){???
  20. ????????????????????Toast.makeText(context,?"有应用被替换",?Toast.LENGTH_LONG).show();???
  21. ????????????}???
  22. ???????????????/*?else??if(Intent.ACTION_PACKAGE_RESTARTED.equals(intent.getAction())){??
  23. ????????????????????Toast.makeText(context,?"有应用被重启",?Toast.LENGTH_LONG).show();??
  24. ????????????}*/???
  25. ??????????????/*??else??if(Intent.ACTION_PACKAGE_INSTALL.equals(intent.getAction())){??
  26. ????????????????????Toast.makeText(context,?"有应用被安装",?Toast.LENGTH_LONG).show();??
  27. ????????????}*/???
  28. ???????????????
  29. ????????}???
  30. ??????????
  31. }???

然后在AndroidManifest.xml中声明这几个Action的<intent-filter>即可在系统里捕获这些广播消息

具体的源代码如下

  1. <receiver?android:name="getBroadcast"?android:enabled="true"?>???
  2. ?????????<intent-filter>???
  3. ?????????????<action?android:name="android.intent.action.PACKAGE_ADDED"></action>???
  4. ?????????????<!--?<action?android:name="android.intent.action.PACKAGE_CHANGED"></action>-->???
  5. ?????????????<action?android:name="android.intent.action.PACKAGE_REMOVED"></action>???
  6. ?????????????<action?android:name="android.intent.action.PACKAGE_REPLACED"></action>???
  7. ?????????????<!--?<action?android:name="android.intent.action.PACKAGE_RESTARTED"></action>-->???
  8. ???????????<!--????<action?android:name="android.intent.action.PACKAGE_INSTALL"></action>-->???
  9. ???????????????<data?android:scheme="package"></data>???
  10. ??????????????</intent-filter>???
  11. </receiver>??

另: intent.getDataString()可以得到安装的是哪个apk,如:

????? package:com.android.myapp

?

?

源:http://maxuefeng.blog.51cto.com/1876326/528708

  相关解决方案