Androidリスニングアプリケーション自体がアンインストールされました
3310 ワード
実際の開発では、アプリケーション自体がアンインストールされているかどうか、または近いニーズをリスニングする必要があることが多い.ネット上で長い間実際のやり方を見ていなかったので、システムログをキャプチャすることで、このアプリケーションがアンインストールされているかどうかを検出し、関連する操作を行うことができるという考え方を与えた.
Intent.ACTION_PACKAGE_REMOVEDは、他のアプリケーションがアンインストールされているかどうかだけを傍受し、自身を傍受できないことを意図しています.
この例も、システムログをリスニングすることによって、アプリケーション自体がアンインストールされているかどうかをリスニングします.
LogcatObserver.java
LogcatScannerService.java
呼び出すときはstartService(this,LogcatScannerServices.class)だけでよい.
例自体は、アプリケーション自体がアンインストールされている動作をリスニングできるとテストされていますが、handleLog()メソッドでは時間のかかる操作しかできません.
例自体は、アプリケーション自体がアンインストールされているかどうかを絶えずログを読むことで監視するので、非常に電気的でパフォーマンスが優れています.もし多くのネットユーザーがもっと良い考えがあれば、一緒に討論してもいいですよ.何を覚えてる?
Intent.ACTION_PACKAGE_REMOVEDは、他のアプリケーションがアンインストールされているかどうかだけを傍受し、自身を傍受できないことを意図しています.
この例も、システムログをリスニングすることによって、アプリケーション自体がアンインストールされているかどうかをリスニングします.
LogcatObserver.java
public interface LogcatObserver {
public void handleLog(String info);
}
LogcatScannerService.java
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class LogcatScannerService extends Service implements LogcatObserver {
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
new AndroidLogcatScannerThread(this).start();
}
@Override
public void handleLog(String info) {
if (info.contains("android.intent.action.DELETE")
&& info.contains(getPackageName())) {
//do something yourself
}
}
private class AndroidLogcatScannerThread extends Thread {
private LogcatObserver mObserver;
public AndroidLogcatScannerThread(LogcatObserver observer) {
mObserver = observer;
}
@Override
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 {
mObserver.handleLog(line);
int waitValue;
waitValue = runtime.exec(cmds).waitFor();
mObserver.handleLog("waitValue=" + waitValue
+ "
Has do Clear logcat cache.");
process = runtime.exec(shellCmd);
is = process.getInputStream();
dis = new DataInputStream(is);
while ((line = dis.readLine()) != null) {
if (mObserver != null)
mObserver.handleLog(line);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException ie) {
} finally {
try {
if (dis != null) {
dis.close();
}
if (is != null) {
is.close();
}
if (process != null) {
process.destroy();
}
} catch (Exception e) {
}
}
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
呼び出すときはstartService(this,LogcatScannerServices.class)だけでよい.
例自体は、アプリケーション自体がアンインストールされている動作をリスニングできるとテストされていますが、handleLog()メソッドでは時間のかかる操作しかできません.
例自体は、アプリケーション自体がアンインストールされているかどうかを絶えずログを読むことで監視するので、非常に電気的でパフォーマンスが優れています.もし多くのネットユーザーがもっと良い考えがあれば、一緒に討論してもいいですよ.何を覚えてる?