android:我怎么知道主屏幕是否在焦点上

时间:2012-05-18 22:03:44

标签: android

我有一个在android上运行的服务,我需要知道焦点上是否有任何应用程序,或者“桌面”(主屏幕)是否在焦点上。我不知道这是否适合引用手机的主屏幕。我怎么知道这是关注焦点还是其他一些应用?

在服务中我有这个代码来获取正在运行的任务:

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
// get the info from the currently running task
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;

我如何从componentInfo知道这是桌面还是否?在模拟器上,componentInfo.getPackageName()返回 com.android.launcher 但是在galaxy s1中(我只在这个手机中测试过)会返回其他内容。

还有其他方法吗?

感谢。

3 个答案:

答案 0 :(得分:5)

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);
ComponentName currentTask = taskInfo.get(0).topActivity;

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_HOME);
mPackageManager = getPackageManager();

List<ResolveInfo> appList = mPackageManager.queryIntentActivities(mainIntent, 0);
for(int i = 0; i < appList.size(); i++) {
    ResolveInfo apl = appList.get(i);
    if(currentTask.getPackageName().equals(apl.activityInfo.packageName)) {
        Log.e(TAG, "ONHOMESCREEN");
    }
}

在AndroidManifest.xml中,您需要获得许可

<uses-permission android:name="android.permission.GET_TASKS"/>

答案 1 :(得分:1)

尝试此功能,

    public boolean isUserIsOnHomeScreen()
{
    ActivityManager manager = 
            (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses();
    for (RunningAppProcessInfo process : processes)
    {
        if(process.pkgList[0].equalsIgnoreCase("com.android.launcher"))
        {
            return true;
        }
        else
        {
            return false;
        }

    }
    return false;

}

答案 2 :(得分:0)

如果您想在“主屏幕聚焦”时获得控制权,请执行主屏幕。