2011-11-28 3 views
15

본질적으로 홈 화면 인 기본 응용 프로그램 ("키오스크"응용 프로그램)으로 사용되는 것으로 가정되는 buissness 응용 프로그램을 개발 중입니다.내 응용 프로그램이 기본 실행 프로그램인지 확인하는 방법

내 런처가 기본 런처인지 확인하는 방법이 있습니까? 감사합니다.

ps. 여기 비슷한 예,하지만 GPS-설정을 확인하려면

LocationManager alm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) { 
    Stuffs&Actions; 
} 

답변

24

당신 선호하는 활동 목록을 PackageManager에서 얻을 수 있습니다. getPreferredActivities() 방법을 사용하십시오.

boolean isMyLauncherDefault() { 
    final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN); 
    filter.addCategory(Intent.CATEGORY_HOME); 

    List<IntentFilter> filters = new ArrayList<IntentFilter>(); 
    filters.add(filter); 

    final String myPackageName = getPackageName(); 
    List<ComponentName> activities = new ArrayList<ComponentName>(); 
    final PackageManager packageManager = (PackageManager) getPackageManager(); 

    // You can use name of your package here as third argument 
    packageManager.getPreferredActivities(filters, activities, null); 

    for (ComponentName activity : activities) { 
     if (myPackageName.equals(activity.getPackageName())) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

잘 작동합니다. 세 번째 매개 변수로 패키지 이름을 사용하고'activities' 목록의 길이를 확인했습니다. 값이 0이면 실행 프로그램을 의미하지 않습니다. –

+0

어떤 경우에 "활동"이이 쿼리에서 하나 이상의 항목으로 채워지겠습니까? –

+2

[getPreferredActivities]에 대한 설명서 (http://developer.android.com/reference/android/content/pm/PackageManager.html#getPreferredActivities%28java.util.List%3Candroid.content.IntentFilter%3E,%20java.util .List % 3Candroid.content.ComponentName % 3E, % 20java.lang.String % 29)는 첫 번째 인수가 메서드에 의해 채워지는 빈 목록이어야 함을 나타냅니다. 귀하의 예처럼 이미 채워진 목록을 제공 할 때의 행동은 정확히 무엇입니까? – achoo5000

5

찾을 내 대답 : 내 활동이 기본 런처인지 아닌지 그것은 나에게 말한다

Which launcher is running?

..

+0

만 알려줍니다. 예를 들어 Google Now 런처와 NOVA 실행기가 둘 다 실행중인 경우 두 가지 모두 반환 목록에 포함됩니다. –

0
boolean isHomeApp() { 
    final Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    final ResolveInfo res = getPackageManager().resolveActivity(intent, 0); 
    if (res.activityInfo != null && getPackageName() 
      .equals(res.activityInfo.packageName)) { 
     return true; 
    } 
    return false; 
} 
0

코 틀린 버전 : 실행기가 실행중인 경우

val Context.isMyLauncherDefault: Boolean 
    get() = ArrayList<ComponentName>().apply { 
    packageManager.getPreferredActivities(
     arrayListOf(IntentFilter(ACTION_MAIN).apply { addCategory(CATEGORY_HOME) }), 
     this, 
     packageName 
    ) 
    }.isNotEmpty()