私は一日中電話の使用状況を監視するアプリケーションに取り組んでいます。これを行うために、デバイスの起動時に開始し、現在のフォアグラウンドアプリケーションが何であるかを確認するためにポーリングを続けるバックグラウンドサービスがあります。次のコードは、アプリケーションをクリックしてからバックアウトし、別のアプリケーションをクリックするだけで機能します。ここで、ブラウザを開いて別のWebページに移動すると、ブラウザがフォアグラウンドアプリケーションとして登録されなくなります。または、たとえば、Googleトークを開くと、現在のアクティビティとして登録されますが、メッセージを送信すると、フォアグラウンドアプリケーションとして登録されなくなります。このバグの原因は何かについての考えやアイデアはありますか?必要に応じて、追加情報を提供しますので、お知らせください。たぶん答えはこの投稿にあり、私はそれを見つけることができません。バックグラウンドタスクまたはサービスから現在のフォアグラウンドアプリケーションを決定する
public static RunningAppProcessInfo getForegroundApp() throws NameNotFoundException{
RunningAppProcessInfo result = null, info = null;
String currApp = null;
am = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
Drawable icon = null;
List <RunningAppProcessInfo> l = am.getRunningAppProcesses();
Iterator <RunningAppProcessInfo> i = l.iterator();
PackageManager pm = context.getPackageManager();
while(i.hasNext()){
info = i.next();
if(info.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && getActivityForApp(info)!=null ){
try {
currApp = getCurrentApplication(info);
System.out.println(currApp);
System.out.println(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
icon = pm.getApplicationIcon(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
System.out.println(getActivityForApp(info));
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;
}
return result;
}
private static ComponentName getActivityForApp(RunningAppProcessInfo target){
ComponentName result=null;
ActivityManager.RunningTaskInfo info;
if(target==null)
return null;
if(am==null)
am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List <ActivityManager.RunningTaskInfo> l = am.getRunningTasks(9999);
Iterator <ActivityManager.RunningTaskInfo> i = l.iterator();
while(i.hasNext()){
info=i.next();
if(info.baseActivity.getPackageName().equals(target.processName)){
result=info.topActivity;
break;
}
}
return result;
}