2012-09-05 5 views
2

Android 앱에 대한 URL 구성표를 등록했습니다 (myapp : // host라고합시다).앱이 Android에 설치되어 있는지 여부 프로그래밍 방식으로 감지

다른 앱에서는 인 텐트를 사용하여 해당 앱을 시작할 수 있지만 앱을 시작하지 않고 첫 번째 앱이 설치되어 있는지 확인하려면 어떻게해야합니까? 아이폰 OS에서

, 그것은

[[UIApplication sharedApplication] canOpenUrl:@"myapp://"]; 

안드로이드에 해당하는이 쉽게

같다? (쉬운 방법)

URL 스키마를 사용하여 확인하고 싶습니다. 나는 패키지 이름을 사용하여 확인하는 방법을 알고,하지만 난 사전에 ...뿐만 아니라 PackageInfo에서

PackageManager pm = m_cContext.getPackageManager(); 
    boolean installed = false; 
    try { 
     @SuppressWarnings("unused") 
     PackageInfo pInfo = pm.getPackageInfo(szPackageName, PackageManager.GET_ACTIVITIES); 
     installed = true; 
    } 
    catch (PackageManager.NameNotFoundException e) { 
     installed = false; 
    } 

감사 (열심히 방식)의 URL 체계를 얻는 방법을 모르겠어요!

참고 :이 iOS 용 같은 질문의 안드로이드 버전입니다 : Detecting programmatically whether an app is installed on iPhone

답변

2

당신이 다음 응용 프로그램을 시작하는 의도를 만들고, 응용 프로그램을 실행하고 다음 queryIntentActivities

Intent intent = //your app launching intent goes here 
PackageManager packageManager = mContext.getPackageManager(); 
List<ResolveInfo> resolvedActivities = packageManager.queryIntentActivities(intent,0); 
if(resolvedActivities.size() >0) 
    \\present 
를 호출하는 방법을 알고 있다면
+3

일반적으로 작동하지만 URL을 처리 할 수있는 여러 가지 활동이있을 수 있으므로 실제로 패키지 이름 ('ResolveInfo.activityInfo.packageName')을 확인하는 것이 좋습니다. 벤더가 애플릿 특허를 (평소와 같이, 의심스럽게) 피하기 위해 노력한 일부 변경 사항으로 인해 더욱 복잡해졌습니다. 자세한 내용은 http://commonsware.com/blog/2012/07/24/linkify-problem-detection-mitigation.html을 참조하십시오. –

0

나는 정적 방법으로 클래스 패키지 매니저에서 queryIntentActivities를 사용

public static boolean canOpenIntent(Context context, Intent intent) 
{ 
    boolean canOpenUrl = false; 
    PackageManager packageManager  = context.getPackageManager(); 
    List<ResolveInfo> resolvedActivities = packageManager.queryIntentActivities(intent, 0); 
    if(resolvedActivities.size() > 0) 
     canOpenUrl = true; 
    return canOpenUrl; 
} 
관련 문제