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

Android利用Logcat监听应用程序本身被卸载

阅读更多

转自:http://blog.csdn.net/lfdfhl/article/details/10450849

 

MainActivity如下:

[java] view plaincopy
 
  1. package cc.testremoveapp;  
  2.   
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5. import android.content.Intent;  
  6. /** 
  7.  * Demo描述: 
  8.  * 监听应用程序本身被卸载 
  9.  *  
  10.  * 注意权限: 
  11.  * <uses-permission android:name="android.permission.READ_LOGS"></uses-permission> 
  12.  *  
  13.  * 参考资料: 
  14.  * http://blog.csdn.net/xyz_lmn/article/details/8330710 
  15.  * Thank you very much 
  16.  */  
  17. public class MainActivity extends Activity {  
  18.     @Override  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.         init();  
  23.     }  
  24.     //启动服务  
  25.     private void init(){  
  26.         Intent intent=new Intent(this, LogcatScannerService.class);  
  27.         startService(intent);  
  28.     }  
  29.       
  30.   
  31. }  


LogcatObserverInterface如下:

[java] view plaincopy
 
  1. package cc.testremoveapp;  
  2. //业务接口  
  3. public interface LogcatObserverInterface {  
  4.     public void handleLog(String logcatInfo);  
  5. }  


LogcatScannerService如下:

[java] view plaincopy
 
  1. package cc.testremoveapp;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.os.IBinder;  
  6.   
  7. public class LogcatScannerService extends Service implements LogcatObserverInterface {  
  8.     @Override  
  9.     public void onCreate() {  
  10.         super.onCreate();  
  11.     }  
  12.       
  13.     @Override  
  14.     public void onStart(Intent intent, int startId) {  
  15.         super.onStart(intent, startId);  
  16.         LogcatScannerThread logcatScannerThread=new LogcatScannerThread(this);  
  17.         logcatScannerThread.start();  
  18.     }  
  19.       
  20.     @Override  
  21.     public IBinder onBind(Intent arg0) {  
  22.         return null;  
  23.     }  
  24.       
  25.     @Override  
  26.     public void onDestroy() {  
  27.         super.onDestroy();  
  28.     }  
  29.       
  30.     /** 
  31.      * 实现LogcatObserverInterface接口中的方法 
  32.      */  
  33.     @Override  
  34.     public void handleLog(String logcatInfo) {  
  35.         if (logcatInfo.contains("android.intent.action.DELETE")&& logcatInfo.contains(getPackageName())) {  
  36.             /** 
  37.              * 注意事项: 
  38.              * LogCat有时会多次甚至一直输出卸载应用的信息 
  39.              * 所以在实际项目中需要对此处留意处理 
  40.              */  
  41.             Intent intent = new Intent(LogcatScannerService.this,UninstallActivity.class);  
  42.             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  43.             startActivity(intent);  
  44.         }  
  45.     }  
  46.   
  47. }  


LogcatScannerThread如下:

[java] view plaincopy
 
  1. package cc.testremoveapp;  
  2. import java.io.DataInputStream;  
  3. import java.io.InputStream;  
  4.   
  5. public class LogcatScannerThread extends Thread {  
  6.       
  7.     private LogcatObserverInterface mLogcatObserverInterface;  
  8.       
  9.     public LogcatScannerThread(LogcatObserverInterface logcatObserverInterface){  
  10.         this.mLogcatObserverInterface=logcatObserverInterface;  
  11.     }  
  12.     @Override  
  13.     public void run() {  
  14.         super.run();  
  15.         int waitValue;  
  16.         String line = "";  
  17.         String[] cmds = { "logcat""-c" };  
  18.         String shellCMD = "logcat";  
  19.         Process process = null;  
  20.         InputStream inputStream = null;  
  21.         DataInputStream dataInputStream = null;  
  22.         Runtime runtime = Runtime.getRuntime();  
  23.         try {  
  24.                 mLogcatObserverInterface.handleLog(line);  
  25.                 waitValue = runtime.exec(cmds).waitFor();  
  26.                 mLogcatObserverInterface.handleLog("waitValue=" + waitValue + "\n Has do Clear logcat cache.");  
  27.                 process = runtime.exec(shellCMD);  
  28.                 inputStream = process.getInputStream();  
  29.                 dataInputStream = new DataInputStream(inputStream);  
  30.                 while ((line = dataInputStream.readLine()) != null) {  
  31.                     if(mLogcatObserverInterface!=null){  
  32.                         mLogcatObserverInterface.handleLog(line);  
  33.                     }  
  34.                 }  
  35.         } catch (Exception e) {  
  36.                 e.printStackTrace();  
  37.         } finally {  
  38.             try {  
  39.                 if (dataInputStream != null) {  
  40.                     dataInputStream.close();  
  41.                 }  
  42.                 if (inputStream != null) {  
  43.                     inputStream.close();  
  44.                 }  
  45.                 if (process != null) {  
  46.                     process.destroy();  
  47.                 }  
  48.             } catch (Exception e) {  
  49.                 e.printStackTrace();  
  50.             }  
  51.         }  
  52.     }  
  53.   
  54. }  


UninstallActivity如下:

[java] view plaincopy
 
  1. package cc.testremoveapp;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5.   
  6. public class UninstallActivity extends Activity {  
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.uninstall);  
  11.     }  
  12.       
  13.   
  14. }  


main.xml如下:

[html] view plaincopy
 
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     >  
  6.   
  7.     <TextView  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="监听应用本身被卸载"  
  11.         android:layout_centerInParent="true"  
  12.         />  
  13.   
  14. </RelativeLayout>  


uninstall.xml如下:

[html] view plaincopy
 
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     >  
  6.   
  7.     <TextView  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="确定卸载本应用?"  
  11.         android:layout_centerInParent="true"  
  12.         />  
  13.   
分享到:
评论

相关推荐

    android应用卸载提示

    当用户尝试卸载一个应用程序时,系统默认情况下不会显示任何提示,而是直接执行卸载操作。然而,开发者可以通过编程方式来监控应用的卸载过程,并在卸载前向用户显示自定义的提示信息。下面我们将详细探讨如何实现这...

    android 防止卸载源码

    通过监控系统的日志输出,即Logcat,这个源码提供了一种方法来检测并阻止应用程序被卸载。现在,我们将深入探讨这个主题,理解其背后的原理和实现。 **Logcat基础知识** Logcat是Android系统中的一个核心工具,用于...

    Android应用源码安卓应用游戏卸载器项目.zip

    在Android平台上,开发一款应用或游戏卸载器项目是一个典型的系统工具类应用,它可以帮助用户方便地管理和卸载设备上的应用程序。在这个“Android应用源码安卓应用游戏卸载器项目”中,我们可以深入学习到以下几个...

    android简单的应用程序管理器

    本项目“android简单的应用程序管理器”旨在提供一个基本的解决方案,让用户能够轻松地运行和卸载应用程序。以下是对这个项目的详细解析: 1. **Android应用程序框架**:Android系统基于Linux内核,其应用程序框架...

    Android例子源码仿iphone的程序卸载器.zip

    这个名为"Android例子源码仿iphone的程序卸载器.zip"的压缩包包含了一个针对Android平台的项目,其目标是模仿iPhone的应用卸载体验。该项目的主要功能是自动扫描并加载设备上非系统的应用程序,允许用户以类似iPhone...

    Android-Android调试桥ADB是Android应用程序开发中使用的客户端-服务器程序

    在Android应用程序开发过程中,Android Debug Bridge(ADB)是一个至关重要的工具,它扮演着客户端-服务器程序的角色。ADB由三部分组成:客户端、服务器和设备端,允许开发者通过USB或无线连接在电脑上与Android设备...

    安卓开发-安卓应用游戏卸载器项目.zip.zip

    5. **BroadcastReceiver**:为了实现后台卸载,可以注册一个`BroadcastReceiver`监听`ACTION_PACKAGE_REMOVED`广播,这样当用户选择卸载应用时,可以在后台接收到卸载完成的信号。 6. **异步操作**:卸载操作可能...

    ADB的安装卸载及使用

    更高级的用途包括利用`adb`执行特定的Android Intent动作。例如,使用`adb shell am start -n`命令可以启动指定的Activity(应用程序组件)。此命令中`-n`参数后跟着的是组件名,通常由应用包名和类名组成,这些信息...

    浅析Android调试桥adb应用.pdf

    adb提供了丰富的命令集,包括安装、卸载应用,查看日志,推拉文件,甚至远程执行shell命令。例如,`adb install &lt;apk_file&gt;`用于安装APK文件,`adb logcat`显示设备日志,`adb pull &lt;remote&gt; &lt;local&gt;`将设备文件复制...

    Android中adb介绍

    总结来说,Android ADB是Android开发者进行设备管理、应用程序调试和数据交换的重要工具,通过其丰富的命令集,开发者可以实现对Android设备的全面控制和调试,从而提高开发效率并解决各种问题。熟悉和掌握ADB的使用...

    Android应用源码之6.DDMS视图和Button.zip

    - **设备视图**:显示连接到开发计算机的所有Android设备或模拟器,可以查看设备状态、重启设备或模拟器,以及安装或卸载应用程序。 - **堆内存视图**:用于监测应用的内存使用情况,包括Dalvik堆信息,可以看到...

    Skygofree Android恶意软件分析.pdf

    总的来说,Skygofree恶意软件的分析涵盖了Android应用的安全分析方法,包括动态分析和静态分析,以及如何利用API调用、权限申请和广播接收器等机制来实现恶意目的。对于Android开发者和安全研究人员来说,理解和分析...

    android adb

    - 安装和卸载应用:可以通过ADB快速安装APK文件,或者卸载已安装的应用。 - 运行shell命令:在设备上执行各种Linux shell命令,如ls、cd、rm等,方便系统级别的调试。 - 日志记录:获取设备上的Logcat日志,帮助...

    android 开发秘籍

    Android Studio提供了丰富的调试工具,如Logcat、Debugger、Performance Monitor等,帮助开发者定位和解决应用中的bug和性能瓶颈。此外,对代码进行持续的优化,减少内存占用,提高CPU和GPU的利用率,也是提升用户...

    Android控件大全以及各布局空间的使用方式总结.pdf

    10. **查看日志**:利用LogCat工具监视应用程序的日志输出,定位和解决问题。 11. **安装/卸载APK**:使用`adb install`和`adb uninstall`命令分别进行APK的安装和卸载。 12. **反编译Android程序**:使用`dexdump...

    Android工具 adb tools

    ADB由Java编写,允许开发者在计算机上通过USB或Wi-Fi与Android设备进行通信,进行调试、安装应用程序、获取设备日志以及执行各种其他操作。 ### ADB组成部分 ADB主要由三部分组成: 1. **服务器端**:通常运行在...

    Android开发 adb命令图示

    利用grep命令可以进一步筛选包名列表,找到包含特定关键词的应用程序。 **13. 清除app数据与缓存:** 命令:`adb shell pm clear &lt;包名&gt;` 该命令用于清空应用的数据与缓存,对于解决应用异常或测试新功能时很有...

Global site tag (gtag.js) - Google Analytics