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

我希望能够追踪到自己的程序被安装过多少次,以及被卸载过多少次,希望牛人给以帮助。谢谢。。... 我希望能够追踪到自己的程序被安装过多少次,以及被卸载过多少次,希望牛人给以帮助。谢谢。。 展开
 我来答
578559967
2012-07-09
知道答主
回答量:5
采纳率:0%
帮助的人:8.2万
展开全部

手段略曲折

首先给你的程序注册读取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();

}

gaoleiaiyj
2012-05-02 · TA获得超过155个赞
知道小有建树答主
回答量:227
采纳率:0%
帮助的人:143万
展开全部
你在APP安装和卸载的时候 ,设置一个flag,将这个flag放置sharepreace这个类中,从里面读取,加上判定,累加就OK了,请采纳
更多追问追答
追问
我想完成的功能是:假如我的程序被卸载,我希望它能够向我的服务器发一个消息。这个功能怎么做啊?
追答
这有很多方法,我举个例子吧,你可以再卸载的时候,将flag通过接口传值至数据库啊,服务端查询数据库就可以实现,你觉得了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式