Android监听应用程序安装和卸载

本文详细介绍了如何使用Android的BroadcastReceiver在系统启动时运行特定程序,并在设备上安装或删除应用程序包时自动启动或停止对应的应用程序。通过修改AndroidManifest.xml配置文件,实现系统启动完成后运行特定程序,以及设备上安装新应用自动启动该应用,同时在应用卸载时删除相关数据。

第一、 新建监听类:BootReceiver继承BroadcastReceiver
Java代码 复制代码
  1. publicclassBootReceiverextendsBroadcastReceiver{
  2. @Override
  3. publicvoidonReceive(Contextcontext,Intentintent){
  4. //接收广播:系统启动完成后运行程序
  5. if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
  6. IntentnewIntent=newIntent(context,WatchInstall.class);
  7. newIntent.setAction("android.intent.action.MAIN");newIntent.addCategory("android.intent.category.LAUNCHER");newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(newIntent);
  8. }
  9. //接收广播:设备上新安装了一个应用程序包后自动启动新安装应用程序。
  10. if(intent.getAction().equals("android.intent.action.PACKAGE_ADDED")){
  11. StringpackageName=intent.getDataString().substring(8);
  12. System.out.println("---------------"+packageName);
  13. IntentnewIntent=newIntent();
  14. newIntent.setClassName(packageName,packageName+.MainActivity");
  15. newIntent.setAction("android.intent.action.MAIN");newIntent.addCategory("android.intent.category.LAUNCHER");newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  16. context.startActivity(newIntent);
  17. }
  18. //接收广播:设备上删除了一个应用程序包。
  19. if(intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")){
  20. System.out.println("********************************");
  21. DatabaseHelperdbhelper=newDatabaseHelper();
  22. dbhelper.executeSql("deletefromusers");
  23. }
  24. }
public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //接收广播:系统启动完成后运行程序
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
             Intent newIntent = new Intent(context, WatchInstall.class);
newIntent.setAction("android.intent.action.MAIN");             newIntent.addCategory("android.intent.category.LAUNCHER");            newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            context.startActivity(newIntent);
        }
        //接收广播:设备上新安装了一个应用程序包后自动启动新安装应用程序。
        if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {
            String packageName = intent.getDataString().substring(8);
            System.out.println("---------------" + packageName);
            Intent newIntent = new Intent();
           newIntent.setClassName(packageName,packageName+ .MainActivity");
newIntent.setAction("android.intent.action.MAIN");             newIntent.addCategory("android.intent.category.LAUNCHER");             newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(newIntent);
        }
        //接收广播:设备上删除了一个应用程序包。
        if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {
            System.out.println("********************************");
            DatabaseHelper dbhelper = new DatabaseHelper();
            dbhelper.executeSql("delete from users");
        }
    }


第二、 修改AndroidManifest.xml配置文件
Xml代码 复制代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="org.me.watchinstall">
  4. <application>
  5. <receiverandroid:name=".BootReceiver"
  6. android:label="@string/app_name">
  7. <intent-filter>
  8. <actionandroid:name="android.intent.action.BOOT_COMPLETED"/>
  9. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  10. </intent-filter>
  11. <intent-filter>
  12. <actionandroid:name="android.intent.action.PACKAGE_ADDED"/>
  13. <actionandroid:name="android.intent.action.PACKAGE_REMOVED"/>
  14. <dataandroid:scheme="package"/>
  15. <!--注意!!这句必须要加,否则接收不到BroadCast-->
  16. </intent-filter>
  17. </receiver>
  18. <activityandroid:name=".WatchInstall"android:label="WatchInstall">
  19. <intent-filter>
  20. <actionandroid:name="android.intent.action.MAIN"/>
  21. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  22. </intent-filter>
  23. </activity>
  24. </application>
  25. <uses-permissionandroid:name="android.permission.INTERNET"/>
  26. <uses-permissionandroid:name="android.permission.RESTART_PACKAGES"/>
  27. <uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  28. </manifest>
  29. 分割线----------------------------------------------------
  30. 还没搞清楚这些代码怎么用在android 桌面widget的在程序卸载时删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值