`
z303729470
  • 浏览: 134129 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多
本文主要讨论如何监控 Android 程序包的安装和删除


Android系统的安装方式我在 《Android 应用程序安装方式 的详细调研》一文中已经做了详细的阐述,链接如下
http://www.2cto.com/kf/201201/116677.html


基于这些安装方式,我们如何对系统进行的安装进行监控呢?

通过阅读Android SDK里关于intent.action这部分里面的描述,我们可以找到一些与package相关的系统广播
[c-sharp] android.intent.action.PACKAGE_ADDED    
android.intent.action.PACKAGE_CHANGED    
android.intent.action.PACKAGE_DATA_CLEARED    
android.intent.action.PACKAGE_INSTALL  
android.intent.action.PACKAGE_REMOVED  
android.intent.action.PACKAGE_REPLACED    
android.intent.action.PACKAGE_RESTARTED   
android.intent.action.PACKAGE_ADDED  
android.intent.action.PACKAGE_CHANGED  
android.intent.action.PACKAGE_DATA_CLEARED  
android.intent.action.PACKAGE_INSTALL
android.intent.action.PACKAGE_REMOVED
android.intent.action.PACKAGE_REPLACED  
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 应用程序的安装和删除

详细的实现代码如下

getBroadcast.java
[c-sharp] package zy.Broadcast; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 
public class getBroadcast extends BroadcastReceiver { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
                
                  if(Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())){ 
                    Toast.makeText(context, "有应用被添加", Toast.LENGTH_LONG).show(); 
            } 
                else  if(Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())){ 
                    Toast.makeText(context, "有应用被删除", Toast.LENGTH_LONG).show(); 
            } 
             /*   else  if(Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被改变", Toast.LENGTH_LONG).show();
            }*/ 
                else  if(Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())){ 
                    Toast.makeText(context, "有应用被替换", Toast.LENGTH_LONG).show(); 
            } 
               /* else  if(Intent.ACTION_PACKAGE_RESTARTED.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被重启", Toast.LENGTH_LONG).show();
            }*/ 
              /*  else  if(Intent.ACTION_PACKAGE_INSTALL.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被安装", Toast.LENGTH_LONG).show();
            }*/ 
             
        } 
        
} 



package zy.Broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class getBroadcast extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
              
                  if(Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被添加", Toast.LENGTH_LONG).show();
            }
                else  if(Intent.ACTION_PACKAGE_REMOVED.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被删除", Toast.LENGTH_LONG).show();
            }
             /*   else  if(Intent.ACTION_PACKAGE_CHANGED.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被改变", Toast.LENGTH_LONG).show();
            }*/
                else  if(Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被替换", Toast.LENGTH_LONG).show();
            }
               /* else  if(Intent.ACTION_PACKAGE_RESTARTED.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被重启", Toast.LENGTH_LONG).show();
            }*/
              /*  else  if(Intent.ACTION_PACKAGE_INSTALL.equals(intent.getAction())){
                    Toast.makeText(context, "有应用被安装", Toast.LENGTH_LONG).show();
            }*/
           
        }
      
}


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

     
</manifest>  
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="zy.Broadcast"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Broadcast"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
      <receiver android:name="getBroadcast" android:enabled="true" >
         <intent-filter>
          <action android:name="android.intent.action.PACKAGE_ADDED"></action>
          <!-- <action android:name="android.intent.action.PACKAGE_CHANGED"></action>-->
          <action android:name="android.intent.action.PACKAGE_REMOVED"></action>
          <action android:name="android.intent.action.PACKAGE_REPLACED"></action>
          <!-- <action android:name="android.intent.action.PACKAGE_RESTARTED"></action>-->
        <!--    <action android:name="android.intent.action.PACKAGE_INSTALL"></action>-->
            <data android:scheme="package"></data>
              </intent-filter>
</receiver>
    </application>
    <uses-sdk android:minSdkVersion="7" />
   
</manifest> 


把程序安装之后 ,系统就会注册这个BroadcastReceiver
然后有应用安装删除替换操作时时,就会弹出Toast提示
以上这样,我们就可以实现监控Android 应用程序的安装过程

至于拦截安装过程,我也正在研究中,大家有好的idea可以与我 分享,谢谢
摘自 Zy的技术心得
分享到:
评论
2 楼 flyingsir_zw 2012-04-06  
有失败或者安装异常的广播吗。
1 楼 flyingsir_zw 2012-04-06  
非常及时。

相关推荐

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

    在Android开发中,有时我们需要监控应用程序的安装和卸载事件,以便执行相应的操作,如更新数据库、发送通知或执行其他自定义逻辑。以下是如何在Android中实现这一功能的详细步骤: 首先,我们需要创建一个...

    Android apk更新安装代码

    在Android应用开发中, APK(Android Package)是用于分发和安装Android应用程序的文件格式。当需要对已安装的应用进行更新时,开发者通常会提供一个新的APK文件供用户下载。本篇文章将详细介绍如何在Android应用中...

    基于zabbix的android的监控开发.zip

    丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行...

    android apk安装流程及解析

    Android APK(Android Package Kit)文件是Android平台上的应用程序安装包格式,包含了应用程序的所有资源和代码。Android APK的安装过程涉及到多个步骤和技术细节,下面我们将深入探讨Android应用的安装原理及其...

    Android编程实现监控apk安装,卸载,替换的方法

    在Android平台上,开发人员可以通过监听特定的广播Intent来实现对应用程序安装、卸载和替换的监控。本篇文章将深入探讨如何使用BroadcastReceiver类以及IntentFilter来实现这一功能。 首先,BroadcastReceiver是...

    android api code学习之ActivityManager

    - 博文可能对ActivityManager的源码进行了分析,揭示了其内部实现机制,这对于理解Android系统的工作原理和优化应用性能非常有帮助。 8. **工具**: - 标签中的"工具"可能指的是博客中介绍了一些使用...

    Android应用 高危权限

    INSTALL_PACKAGES 权限允许一个程序安装 packages,这个权限非常危险,因为如果恶意程序获得了这个权限,就可以安装恶意软件,危害用户的设备安全。 DELETE_PACKAGES 权限允许一个程序删除包,这个权限也非常危险...

    基于Android的手机安全管理软件的设计与实现毕业论文.doc

    本资源是关于设计和实现基于Android的手机安全管理软件的毕业论文。该论文主要介绍了基于Android系统的手机安全管理软件的设计和实现过程,涵盖了基础技术简介、总体设计与实现、测试等三个方面。 一、基础技术简介...

    基于WiFi的Android局域网视频监控.zip

    丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行...

    Android-一键清理开源版包括内存加速缓存清理自启管理软件管理等。

    Android系统提供了BroadcastReceiver和PackageManager服务来监控和管理应用的启动行为,开发者可以通过监听ACTION_PACKAGE_ADDED/REMOVED广播,配合其他方法控制应用的启动权限。 4. **软件管理**:该功能通常包含...

    Android_Widget开发实例-电量监控

    总结来说,"Android_Widget开发实例-电量监控"是一个教学示例,它演示了如何利用Android的AppWidget、Service和RemoteViews来创建一个实时更新的电量监控Widget。通过这个例子,开发者可以学习到如何在Android平台上...

    Android手机平台音乐播放器毕业论文

    1.2 编写目的:旨在研究和实现一个功能完备、用户体验良好的Android音乐播放器,同时也为Android应用程序开发提供实践案例。 **第二章 系统需求分析** 2.1 功能需求: - 基本控制需求:包括播放、暂停、停止、下...

    "Android Studio 3.5 开发环境安装套件"

    android-studio-ide-191.5977832-windows.exe为Windows用户的安装程序,安装简易,可自定义路径及系统集成。此版本启动与项目加载速度加快,减少等待。 智能编辑器提供精准代码建议,加速编码进程。布局编辑器升级,...

    基于Android的手机助手app项目设计与实现

    在本项目"基于Android的手机助手app项目设计与实现"中,我们将深入探讨如何构建一个功能丰富的Android应用程序,旨在提供全面的手机管理服务。这个app可能会包含诸如文件管理、应用管理、系统优化、电池管理、内存...

    精通ANDROID 3(中文版)1/2

    1.5 使用Android SDK开发最终用户应用程序  1.5.1 Android模拟器  1.5.2 Android UI  1.5.3 Android基础组件  1.5.4 高级UI概念  1.5.5 Android Service组件  1.5.6 Android媒体和电话组件  1.5.7 ...

    Android权限列表permission说明.txt

    - **定义**:允许应用程序安装新的软件包。 - **权限名称**:"android.permission.INSTALL_PACKAGES" - **应用场景**:适用于应用商店类应用或需要自动安装新软件包的场景。 #### 7. INTERNAL_SYSTEM_WINDOW - **...

    android 高危权限对照表开发必读

    如果应用程序安装了恶意软件包,将可能会危害用户的隐私和系统安全。 3. android.permission.INTERNET:允许程序打开网络套接字 该权限允许应用程序访问互联网,可能会泄露用户的隐私信息或下载恶意软件。如果应用...

    android shell apk

    描述中提到,“android上面执行终端的程序,安装就可以使用”,意味着用户可以通过安装这个APK文件(migoolan.terminal.apk)在Android设备上获得一个终端工具,无需额外的配置或权限,安装完成后就能直接运行,执行...

    android任务管理器

    在Android操作系统中,任务管理器是一个至关重要的组件,它负责监控和管理系统的应用程序及进程,确保设备高效、稳定地运行。下面将详细讲解Android任务管理器的工作原理、功能以及如何查看和管理正在运行的任务和...

    android launcher2源码

    通过研究Launcher2的源码,开发者不仅可以理解Android桌面的实现原理,还能学习到如何处理复杂的UI交互、数据持久化、服务监控等问题。这将有助于提高Android应用开发的专业技能,尤其对于系统级应用的开发者,更是...

Global site tag (gtag.js) - Google Analytics