3

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(私はこの電話でのみテストしました)では別のものを返します。

これを行う他の方法はありますか?

4

3 に答える 3

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"/>
于 2014-08-28T18:52:09.963 に答える
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;

}
于 2015-04-09T11:20:14.420 に答える
0

「ホーム画面にフォーカスがある」ときに制御したい場合は、ホーム画面を実装します。

于 2012-05-19T14:19:40.010 に答える