`
亚当爱上java
  • 浏览: 695544 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android利用系统广播---监听应用程序安装和卸载[转]

阅读更多
   在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名。当卸载程序时系统发android.intent.action.PACKAGE_REMOVED广播。同样intent.getDataString()获得所卸载的包名。

第一、 新建监听类:BootReceiver继承BroadcastReceiver
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 version="1.0" encoding="UTF-8"?>   
<manifest xmlns:android="http://schemas.android.com/apk/res/android"   
     package="org.me.watchinstall">   
    <application>   
        <receiver android:name=".BootReceiver"   
                  android:label="@string/app_name">   
            <intent-filter>   
                <action android:name="android.intent.action.BOOT_COMPLETED"/>   
                <category android:name="android.intent.category.LAUNCHER" />   
            </intent-filter>   
            <intent-filter>   
             <action android:name="android.intent.action.PACKAGE_ADDED" />   
             <action android:name="android.intent.action.PACKAGE_REMOVED" />   
              <data android:scheme="package" />   
<!--[color=red] 注意!! 这句必须要加,否则接收不到BroadCast  [/color] --> 
            </intent-filter>   
        </receiver>   
        <activity android:name=".WatchInstall" android:label="WatchInstall">   
            <intent-filter>   
                <action android:name="android.intent.action.MAIN"/>   
                <category android:name="android.intent.category.LAUNCHER"/>   
            </intent-filter>   
        </activity>   
    </application>   
    <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> 

分享到:
评论
5 楼 eagledame 2016-08-25  
<data android:scheme="package" />

这个提示帮助了很大 ,谢谢了
4 楼 flyingsir_zw 2014-01-16  
flyingsir_zw 写道
安装失败了,什么样的广播呢???



安装开始,没有接收到成功的广播,安装失败。
3 楼 亚当爱上java 2013-12-19  
cdc002 写道
DatabaseHelper dbhelper = new DatabaseHelper();  这一句代码是什么意思?

这个貌似没什么做用,好像是删除数据库中的相关信息吧。DatabaseHelper 貌似继承SQLiteDatabase。这个是N年前破解应用汇,大概是检测应用程序安装后把 app的相关信息记录数据库,卸载后再删除。代码貌似有问题,估计迷惑了不少人,汗!
2 楼 cdc002 2013-12-19  
DatabaseHelper dbhelper = new DatabaseHelper();  这一句代码是什么意思?
1 楼 flyingsir_zw 2012-04-06  
安装失败了,什么样的广播呢???

相关推荐

    Android 监听程序的安装和卸载

    应用开发中有需要监听到程序是否安装或者卸载成功,在android系统中,安装和卸载都会发送广播,当应用安装完成后系统会发android.intent.action.PACKAGE_ADDED广播。可以通过intent.getDataString()获得所安装的包名...

    Android代码-AppUninstall

    监听系统卸载广播:只能监听到其他应用的卸载广播,无法监听到自己是否被卸载。 读取系统log:第三方软件卸载无法得知。 静默安装另一个程序,监听自己是否被卸载:需要root权限。 Java线程轮询,监听/data/data/{...

    Android App监听自身卸载反馈统计

    作者venshine,源码AppUninstall,方案监听系统卸载广播:只能监听到其他应用的卸载广播,无法监听到自己是否被卸载。读取系统 log:第三方软件卸载无法得知。静默安装另一个程序,监听自己是否被卸载:需要 root ...

    android监听安装和卸载示例

    Android应用程序的安装和卸载事件,是由系统进行监听并全局广播的,支持1.5(android 3)以上,因此,如果想要监听获取应用的安装和卸载事件,只需要自定义一个BroadcastReceiver,来对系统广播进行监听和处理

    Android 监听apk安装替换卸载广播的实现代码

    首先是要获取应用的安装状态,通过广播的形式以下是和应用程序相关的Broadcast ActionACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程序不能接收到这个广播)ACTION_PACKAGE_...

    Android开发资料合集-World版!

    9.46、将程序安装到SD卡 268 9.47、创建一个SD映像 269 9.48、查看手机内存存储 269 9.49、在模拟器上调试GOOGLE MAPS 271 9.50、建立GPRS连接 273 9.51、获取手机位置 274 9.5* 获得经纬度,地名标注在地图上 274 ...

    Android禁止某些软件的安装

    在开发中经常会自动安装一些软件到手机上,很烦人,就自己写了个程序就监听某个软件的安装广播,并将其卸载掉

    adb1.0.26包含fastboot.exe

    INSTALL_FAILED_UPDATE_INCOMPATIBLE 以前安装过同名应用,但卸载时数据没有移除 先 adb uninstall &lt;packagename&gt; 再安装 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 请求的共享用户存在但签名不一致 INSTALL_FAILED...

    Android 开发技巧

    9.46、将程序安装到SD卡 268 9.47、创建一个SD映像 269 9.48、查看手机内存存储 269 9.49、在模拟器上调试GOOGLE MAPS 271 9.50、建立GPRS连接 273 9.51、获取手机位置 274 9.5* 获得经纬度,地名标注在地图上 274 ...

    绿色守护 greenify v 2.5.2 Beta1

    『绿色守护』帮助你甄别那些对系统全局性能和耗电量有不良影响的应用程序,并通过独特的『绿色化』技术,阻止它们消耗您的电池电量,占用您的宝贵内存。经过『绿色化』工艺处理的应用,在您没有主动启动它们的时候,...

Global site tag (gtag.js) - Google Analytics