這篇文章是整理的以前用過的一個功能,由於多種原因現在停用了,也希望這篇文章能幫助一些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
/**
* @author 張興業
* 郵箱:xy-zhang#163.com
* android開發進階羣:278401545
* http://blog.csdn.net/xyz_lmn
*/