android程序如何监听到自己被卸载这个事件。

android程序如何监听到自己被卸载这个事件。,第1张

手段略曲折

首先给你的程序注册读取log权限,

<uses-permission android:name="android.permission.READ_LOGS" />

然后在你的程序里开一个后台线程,不停的读取log,当你的应用(包括其他任何应用)被卸载时,系统的ActivityManager会打印出一行log,大概是removing:你的包名。这个时机是在卸载界面点击确定后的一瞬间触发的,如下图

之后你的程序不管是进程还是线程都会被杀死。这一瞬间很短,但足够你捕获到,能不能通过网络发送出去你要发的信息就不敢保证了,我反正是没发出去就被杀死了。

还有个时机是在程序管理界面点击卸载按钮跳转卸载界面时会打印一行log,如图:

但是不能保证用户就会点确定真把你的卸载了。。所以自己权衡吧。 

这是我在网上找到的唯一方法

代码如下:

private void ListenLog(){

  Thread t = new Thread(new Runnable() {

public void run() {

// TODO Auto-generated method stub

Log.v("Fuck","Start listening log")

String[] cmds = { "logcat", "-c" }

String shellCmd = "logcat"

Process process = null

InputStream is = null

DataInputStream dis = null

String line = ""

Runtime runtime = Runtime.getRuntime()

try {

int waitValue

waitValue = runtime.exec(cmds).waitFor()

process = runtime.exec(shellCmd)

is = process.getInputStream()

dis = new DataInputStream(is)

while ((line = dis.readLine()) != null && mKeepListenFlag) {

if (!line.contains("Fuck")) {

Log.v("Fuck", line)

//这里只是把每个log都打印了一遍,可以再此判断line里是否有removing字样,然后做些处理   

}

}

Log.v("Fuck","finished listen")

} catch (InterruptedException e) {

e.printStackTrace()

} catch (IOException ie) {

ie.printStackTrace()

} finally {

try {

if (dis != null) {

dis.close()

}

if (is != null) {

is.close()

}

if (process != null) {

process.destroy()

}

} catch (Exception e) {

e.printStackTrace()

}

}

}

})

//mKeepListenFlag是个成员变量,是为了让程序结束时终止线程的,否则可能产生程序多次启动,然后这个线程就启动了多个。Android线程可不会因为Activity的退出而终止。     

  mKeepListenFlag = true

t.start()

}

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

手机root权限

1

首先呢要说说,特别不推荐的就是就是通过re文件管理器直接到“/system/app”目录下删除,因为,一:可能不知道删除的东西是什么,是否需要。二:就是没有任何备份,只是把软件主程序删掉了,可能还有一些组件或者系统残留的没有删掉,造成一些程序想启动又启动不了,就像常出现的自动“强制关闭”。

2

“systemapp.remover”这个软件与其说它是一个软件不如说它是一个安卓系统工具,因能很好的彻底的删除掉一个程序的所有东西,同时也能备份,咱们要做的就是通过一些软件市场,比如百度软件市场找到并安装,在程序单中找到,图中红圈那一个

3

点击进入之后呢,能看到,移动程序,恢复程序,普通程序,系统程序,这四个选项。点击右下角“系统程序”进入。

4

进入之后,选择需要的需要卸载的烦恼很久的耗电耗运存的程序,比如不需要系统自带的图库觉得第三方的图库或者更好,那么就果断的点击,d出对话框中选择“是”直接卸载

5

当然遇到一些自己不确定的程序怎么办?这其实也很好办,点击程序选择“其他”按钮,然后选择“backup”备份,之后删除,如果发现系统异常,那么可以返回“systemapp.remover”的首页进行恢复程序

6

最后一步当然就是退出程序,然后重启手机,系统垃圾程序很多的人就会发现手机在运行速度上有一个很大的提升


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8045488.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存