2014-02-07 189 views
1

是谷歌地圖和谷歌導航相同的包?谷歌地圖和導航

我要檢查,如果推出這一意圖

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
Uri.parse("google.navigation:ll="+toPosition.latitude+","+ toPosition.longitude)); 
startActivity(intent); 

之前安裝谷歌導航我用這個方法來檢查其安裝

public boolean isGoogleNavInstalled() 
    { 
     try 
     { 
      ApplicationInfo info = getActivity().getPackageManager().getApplicationInfo("google.navigation", 0); 
      return true; 
     } 
     catch(PackageManager.NameNotFoundException e) 
     { 
      return false; 
     } 
    } 

但這總是返回FALSE。 Google導航包的確切名稱是什麼?如果它與Google地圖相同,那麼可以假定任何有關設備和API級別的Google地圖版本都附帶了導航功能?

回答

2

Google Maps和Google Navigation是同一個軟件包嗎?

是的。

我要檢查啓動此意圖

更相關的用戶將看到如果Intent解析到任何東西,如通過resolveActivity()PackageManager之前是否安裝了谷歌導航。如果用戶希望使用其他應用來處理該請求,那麼這是用戶的特權。

但這總是返回FALSE

那是因爲你逝去的並不在設備上存在的包名。

什麼是谷歌導航包的確切名稱?

谷歌導航不作爲一個獨立的軟件包存在。它是Google地圖的一部分。

如果它與Google地圖相同,那麼可以假設任何有關設備和API級別的Google地圖版本都帶有導航功能?

我當然不會認爲,因爲有可能是在導航部分分佈的侷限性,由於當地法律,利用上游數據提供商的許可條款等

這就是爲什麼它是更爲相關爲你的用戶看到,如果您想要Intent解析到的東西,在PackageManager使用queryIntentActivities()resolveActivity() ..只是因爲可能要使用谷歌導航,並不意味着每個人都希望使用谷歌導航。

請注意,您的Intent無論如何都依賴於無證的Uri結構,因此無法保證即使Google地圖也能遵守它。

+0

優秀的答案!非常感謝你。我不太確定那麼導航應該怎麼做。有沒有這樣做的標準方式? – klifa

+0

@klifa:沒有官方的「Intent」結構可以引導用戶進行導航。因此,您使用'google.navigation:'的效果大致相當。我的觀點是,你應該擔心你的'Intent'是否解決了,而不是安裝了這樣的應用程序,並且當你使用這種未公開的'Uri'時遇到兼容性問題時不要抱怨。 :-) – CommonsWare

+0

明白了。謝謝。 – klifa

1
Intent intent = new Intent(Intent.ACTION_VIEW, 
    Uri.parse("google.navigation:q=" + point.getLat() + "," + point.getLon())); 
    if(!canHandleIntent(mActivity, intent)) { 
     intent = new Intent(Intent.ACTION_VIEW); 
     intent.setData(Uri.parse("market://detailsid=com.google.android.apps.maps")); 
    } 
    startActivity(intent); 

public boolean canHandleIntent(Context context, Intent intent){ 
    PackageManager packageManager = context.getPackageManager(); 
    List activities = packageManager.queryIntentActivities(
       intent, PackageManager.MATCH_DEFAULT_ONLY); 
     return !(activities == null || activities.size() == 0); 
} 

如果意圖解決任何事情,則用Intent啓動適當的應用程序,否則在Google地圖頁面上打開Goog​​le Play。