android实现卸载提示

       这篇文章是整理的以前用过的一个功能,由于多种原因现在停用了,也希望这篇文章能帮助一些android入门的小童鞋。android是不提供监控卸载自己的功能的,这里使用了监控android日志的功能,android日志相关知识可以参考adb logcat 查看日志这篇文章。

        android卸载提示的思路是启动一个服务监控android系统的打印日志,当监控到"android.intent.action.DELETE"并且包含自己应用的包名时,提示给用户。

监控代码

 

public class AndroidLogcatScannerThread extends Thread {
    private LogcatObserver observer;
    public AndroidLogcatScannerThread(LogcatObserver observer) {
            this.observer = observer;
    }

    public void run() {
            String[] cmds = { "logcat", "-c" };
            String shellCmd = "logcat";
            Process process = null;
            InputStream is = null;
            DataInputStream dis = null;
            String line = "";
            Runtime runtime = Runtime.getRuntime();
            try {
                    observer.handleLog(line);
                    int waitValue;
                    waitValue = runtime.exec(cmds).waitFor();
                    observer.handleLog("waitValue=" + waitValue + "\n Has do Clear logcat cache.");
                    process = runtime.exec(shellCmd);
                    is = process.getInputStream();
                    dis = new DataInputStream(is);
                    while ((line = dis.readLine()) != null) {
                    	//Log.d("Log","Log.Bestpay:"+line);
                    	
                    	if(observer!=null)
                            observer.handleLog(line);  
                            
                    }
            } 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();
                    }
            }
    }
}

 

监控服务:

 

 

public class AndroidLogcatScannerService extends Service implements LogcatObserver{

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}

	@Override
	public void onStart(Intent intent, int startId) {
		// TODO Auto-generated method stub
		super.onStart(intent, startId);
		
		AndroidLogcatScannerThread scannerThread=new AndroidLogcatScannerThread(AndroidLogcatScannerService.this);
		scannerThread.start();
	}

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void handleLog(String info) {
		// TODO Auto-generated method stub
		if (info.contains("android.intent.action.DELETE") && info.contains(getPackageName())) {

	            Intent intent = new Intent();
	            intent.setClass(AndroidLogcatScannerService.this, UninstallActivity.class);
	            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	            startActivity(intent);
        }
	}

}


上面的代码基本实现了卸载提示,最后不要忘了权限:

 

 

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


代码下载地址:

 

http://download.csdn.net/detail/xyz_lmn/4904797

 

*  iOS入门群:83702688
*  android开发进阶群:241395671
*  我的新浪微博:@张兴业TBOW
*  我的邮箱:xy-zhang#163.com#->@)
*/

 

posted @ 2013-08-10 09:10  张兴业  阅读(1259)  评论(1编辑  收藏  举报