我想检查一下,我的程序是在后台还是不在!我的prgram有一个包(我所有的课都在一个包里)。我搜查,最后我找到了这种方式。我编写这段代码,但是当我的程序在后台时,我的代码没有运行。为什么?在后台运行我的应用程序
public class BackgroundCheck extends AsyncTask<Context,Void,Boolean>{
@Override
protected Boolean doInBackground(Context... arg0) {
// TODO Auto-generated method stub
Context context=arg0[0];
return isAppInBackground(context);
}
private boolean isAppInBackground(Context context){
ActivityManager activityManager=(ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcess=activityManager.getRunningAppProcesses();
if (appProcess==null)
return false;
final String packageName=context.getPackageName();
Log.e("packageName", packageName);
//Toast.makeText(context, "packageName="+packageName,Toast.LENGTH_LONG).show();
for(RunningAppProcessInfo processInfo:appProcess){
if((processInfo.importance==RunningAppProcessInfo.IMPORTANCE_BACKGROUND)&&(processInfo.processName.equals(packageName))){
Log.e("process", "in background");
Toast.makeText(context, "process in background", Toast.LENGTH_LONG).show();
Log.e("packagenmae", processInfo.processName);
return true;
}
}
return false;
}
}
我在这个类中添加了这段代码,但是当我的程序在后台运行,否则如果运行!像我的程序总是在前台!什么问题?
if((processInfo.importance==RunningAppProcessInfo.IMPORTANCE_BACKGROUND)&&(processInfo.processName.equals(packageName))){
Log.e("process", "in background");
Toast.makeText(context, "process in background", Toast.LENGTH_LONG).show();
Log.e("packagenmae", processInfo.processName);
return true;
}
else if((processInfo.importance==RunningAppProcessInfo.IMPORTANCE_FORGROUND)&&(processInfo.processName.equals(packageName))){
Log.e("process","in forground");
return true;
}
我可以使用另一种在API 7+中运行的方式吗?这种方式应该是可靠的... 感谢您的建议
感谢快速回复。你的服务是什么意思?我如何创建一个服务来检查这个? – user2982082
http://developer.android.com/guide/components/services.html – Kuffs
另一件事,我konw,我可以一次运行一个活动,但为了检查我的程序是在后台还是坚果,不应该检查这个包名?这是错误的? – user2982082