1、判断apk是否在最上面活动
private static boolean isForground(final Context context){
ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
if (mActivityManager.getRunningTasks(1) == null) {
Log.e("hdxxx", "running task is null, ams is abnormal!!!");
return false;
}
ActivityManager.RunningTaskInfo mRunningTask =
mActivityManager.getRunningTasks(1).get(0);
if (mRunningTask == null) {
Log.e("hxxx", "failed to get RunningTaskInfo");
return false;
}
String pkgName = mRunningTask.topActivity.getPackageName();
Log.e("hxxx", "pkgName:" + pkgName);
if(pkgName.equals("com.mangechargespot.app")){
return true;
}
return false;
}
2、阻止关机或重启
在/frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java下:
static void shutdownInner(final Context context, boolean confirm) {
// ensure that only one thread is trying to power down.
// any additional calls are just returned
Log.d("hxxx","ShutdownThread_____shutdownInner()");
if(isForground(context)){
Toast.makeText(context,"阻止关机或重启",Toast.LENGTH_SHORT).show();
return;
}
synchronized (sIsStartedGuard) {
if (sIsStarted) {
Log.d(TAG, "Request to shutdown already running, returning.");