2013-11-28 3 views
4

내 앱에서 Hangouts을 실행하고 해당 앱 사용자가 화상 통화를 할 수 있습니다.
하지만 일부 대상 기기 사용자는 기본 Google 토크 앱을 사용합니다 (행 아웃으로 업데이트되지 않음).Google 토크 앱과 수다방을 구분하는 방법은 무엇입니까?

문제는 Google 토크 및 행 아웃 - 동일한 패키지 이름이 com.google.android.talk 인 동일한 앱이며 어떻게 구별 할 수 있는지 모르겠습니다.

내 논리 : 기기에서 패키지를 발견했을 때 - 앱을 실행했습니다. 없다면이 앱이있는 공개 시장 페이지.

Google 토크 앱과 수다방을 구분하는 방법을 아는 사람이 있습니까?

내 코드 : 지금은 하나의 아이디어가

public void startApplication(String packageName){ 
     try 
     { 
      Intent intent = new Intent("android.intent.action.MAIN"); 
      intent.addCategory("android.intent.category.LAUNCHER"); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
      List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0); 
      for(ResolveInfo info : resolveInfoList) 
       if(info.activityInfo.packageName.equalsIgnoreCase(packageName)) 
       { 
        launchComponent(info.activityInfo.packageName, info.activityInfo.name); 
        return; 
       } 
      showInMarket(packageName); 
     } 
     catch (Exception e) 
     { 
      showInMarket(packageName); 
     } 
    } 
private void launchComponent(String packageName, String name){ 
     Intent intent = new Intent("android.intent.action.MAIN"); 
     intent.addCategory("android.intent.category.LAUNCHER"); 
     intent.setComponent(new ComponentName(packageName, name)); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 
    private void showInMarket(String packageName){ 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 

UPD는 다음 publicSourceDir/system/app/Talk.apk 있는지 확인합니다 - "예"- 우리는 "Google 토크"응용 프로그램을 미리 설정 한 - 하지만 이것이 좋은 해결책이라고 생각하지 않습니다.
당신은 그것에 대해 무엇을합니까?

String publicSourceDir = getPackageManager() 
          .getPackageInfo(info.activityInfo.packageName, 0).applicationInfo.publicSourceDir; 
if(!publicSourceDir.toLowerCase().endsWith(GOOGLE_HANGOUT_SYSTEM_APK.toLowerCase())){ 
         ...... 
        } 

답변

3

Google에서 행 아웃이 설치된 ROM을 ROM 부품에 배송하기 시작했을 때 설치 경로 확인이 작동하지 않습니다. 원래 Nexus 5 ROM에는 ROM에 새 행 아웃 앱이 포함되어 있다고 생각합니다. 추가 업데이트는 사용자 공간에 설치됩니다.

어쨌든 허가 android.permission.SEND_SMS을 확인하는 것이 트릭을 수행해야합니다. 테스트 할 좋은 Google 토크가있는 기기가 없습니다. 하지만이 권한이 없다고 생각합니다.

private boolean isHangoutsInstalled(final Context context) { 
    PackageManager pm = context.getPackageManager(); 
    assert pm != null; 

    // check for bable aka hangouts app 
    try { 
     if (pm.getApplicationInfo("com.google.android.apps.babel", 0) != null) { 
      return true; 
     } 
    } catch (PackageManager.NameNotFoundException e) { 
     Log.e(TAG, "babel not found, check for talk app"); 
    } 

    // check for talk app or updated talk app now known as hangouts 
    try { 
     if (pm.getApplicationInfo("com.google.android.talk", 0) == null) { 
      // no talk, no update 
      return false; 
     } 
    } catch (PackageManager.NameNotFoundException e) { 
     Log.e(TAG, "talk app not found"); 
     // no talk, no update 
     return false; 
    } 

    // talk app found 
    // check for talk update 
    return PackageManager.PERMISSION_GRANTED == pm 
      .checkPermission("android.permission.SEND_SMS", 
          "com.google.android.talk"); 
} 

com.google.android.apps.babel 패키지를 확인하는 첫 번째 부분은 확실하지 않습니다.
내 N4의 행 아웃 앱에서 디코딩 된 AndroidManifest.xmlpackageName="com.google.android.apps.babel"입니다. 그러나 PackageManagerNameNotFoundException입니다.
아마도 첫 번째 부분을 완전히 삭제할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 당신의 솔루션이 내 것이 더 좋다고 생각합니다. 그러나 이것은 여전히 ​​매우 민감한 순간이며 모든 대상 장치에 대한 테스트가 요구됩니다. – jimpanzer

0

응용 프로그램 버전을 사용해야합니다. 행 아웃은 2.0이고 2.1.33의 gtalk는 마지막 것 같습니다. https://stackoverflow.com/a/6593822/955143

하지만 싶어 사용 뭔가

같은 것은
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
version = pInfo.versionName; 

GTalk을가 더욱 업그레이드되지 않습니다 때문에, 당신이 그것을 확인하기 위해이 방법으로 전달할 수 있으며, 또 다른 방법이 될 수있다 :

은 한 번보세요 행 아웃 앱이 마지막 앱 (또는 일부 버전)이 아닌 경우 항상 사용자를 시장에 보냅니다.

단점은 코드 수정에 따라 행 아웃 업데이트를 계속해야한다는 것입니다.

+0

이 전쟁은 처음 생각이지만 Google 토크 버전을 체계화 할 수 없습니다. 기기에 Google 토크 앱이 미리 설정되어 있으면 "YYYT-XXXXXX"와 같은 versionName이 있습니다. "YYYY"는 Android 버전입니다. 4.0.4 또는 4.1.2). Android 2.XX에서 테스트하지는 않았지만 문제가 될 수 있습니다. – jimpanzer

+0

대시 다음 부분 만 고려하십시오. – Rafareino

+0

gtalk의 버전은 "YYYY-XXXXXX"또는 "XXXXXX"일 수 있으며 어떤 버전이 장치에 있는지 100 % 확신 할 수 없습니다. – jimpanzer

관련 문제