2012-05-18 2 views
3

У меня есть служба, работающая на 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, но в галактике s1 (я тестировал только в этом телефоне) возвращает что-то еще.

Есть ли другой способ сделать это?

Спасибо.

+0

«Мне нужно знать, если это любое приложение на фокус или если "рабочий стол" (главный экран) находится в фокусе »- почему? – CommonsWare

+0

Мое впечатление, что вы не можете * надежно определить это. И поймите, что замена экрана для домашнего экрана также относится к категории приложений. –

+0

это менее важно. в нескольких словах я создаю приложение, которое помогает родителям защищать свой телефон, если ребенок в возрасте 2-4 лет хочет играть по телефону. И для этого приложения мне нужно что-то сделать, когда малыш идет на рабочий стол. –

ответ

0

Если вы хотите получить контроль, когда «главный экран находится в фокусе», выполните домашний экран.

+0

Мне не нужно реализовывать домашний экран, чтобы предотвратить использование определенных пользователей (детей). По этой причине мне нужно знать, когда главный экран является основным видом деятельности. –

+0

@ ZelterAdy: И для вас, как вы знаете, когда главный экран - это главная деятельность, - это для вас домашний экран. – CommonsWare

+0

Спасибо за ваш ответ. Все домашние экраны должны иметь что-то общее, не так ли? Как операционная система распознает приложение в качестве главного экрана? –

4
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"/> 
+0

Работает отлично. Спасибо за обмен ...;) –

+0

Работает на Android 7 еще. Woohoo – Vlad

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; 

} 
Смежные вопросы