2012-12-08 16 views
28

Google मानचित्र एंड्रॉइड एपीआई वी 2 का उपयोग करते समय मैं Google Play Services setup documentation का पालन कर रहा हूं ताकि यह सुनिश्चित किया जा सके कि Google Play Services इंस्टॉल हैं, मेरी मुख्य गतिविधि में निम्न कोड का उपयोग करके:Google मानचित्र एंड्रॉइड एपीआई वी 2 जांचें कि क्या Google मैप्स डिवाइस पर

@Override 
public void onResume() 
{ 
     checkGooglePlayServicesAvailability(); 

     super.onResume(); 
} 

public void checkGooglePlayServicesAvailability() 
    { 
     int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
     if(resultCode != ConnectionResult.SUCCESS) 
     { 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, this, 69); 
      dialog.setCancelable(false); 
      dialog.setOnDismissListener(getOnDismissListener()); 
      dialog.show(); 
     } 

     Log.d("GooglePlayServicesUtil Check", "Result is: " + resultCode); 
    } 

यह ठीक काम करता है। हालांकि, मैंने देखा कि मेरे पुराने एंड्रॉइड फोनों में से कुछ (ज्यादातर 2.2 चल रहे हैं) दोनों Google PlayServices के साथ-साथ Google मानचित्र ऐप भी गायब थे।

लॉगकैट इस त्रुटि की रिपोर्ट करेगा: Google मानचित्र एंड्रॉइड एपीआई: Google मानचित्र एप्लिकेशन गुम है।

प्रश्न - मैं डिवाइस पर Google मानचित्र की उपलब्धता के लिए ऊपर दिए गए एक जैसा चेक कैसे कर सकता हूं? दूसरा, यदि उपयोगकर्ता के पास पहले से Google मानचित्र स्थापित है, तो मुझे लगता है कि चेक को यह सुनिश्चित करने की आवश्यकता होगी कि उनका स्थापित संस्करण एंड्रॉइड मैप्स एपीआई के वी 2 के साथ संगत है।

अद्यतन यहाँ मेरी setupMapIfNeeded() विधि जो onCreate के अंत() पर कहा जाता है। यह वह जगह है जहां मुझे लगता है कि मैं अगर गूगल मैप्स स्थापित किया गया है का निर्धारण और उपयोगकर्ता को सचेत, और ब्लॉक को दिखाना चाहते:)

private void setUpMapIfNeeded() 
{ 
    // Do a null check to confirm that we have not already instantiated the map. 
    if (mMap == null) 
    { 
     // Try to obtain the map from the SupportMapFragment. 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.basicMap)).getMap(); 

     if (mMap != null) 
     { 
      mMap.setLocationSource(this); 

      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(44.9800, -93.2636), 10.0f)); 
      setUpMap(); 
     } 
     else 
     { 
      //THIS CODE NEVER EXECUTES - mMap is non-null even when Google Maps are not installed 
      MapConstants.showOkDialogWithText(this, R.string.installGoogleMaps); 
     } 
    } 
} 
+0

मैं सिर्फ पूछ सकता हूँ क्या है कि 69 आप getErrorDialog विधि paramte पर है आरएस? – luiscvalmeida

+1

@luiscvalmeida 69 सिर्फ अनुरोध कोड है (मैंने इसे चुना है)। Http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesUtil.html#getErrorDialog – DiscDev

उत्तर

50

अधिक पोकिंग और प्रोडिंग के ठीक बाद मुझे एहसास हुआ कि मुझे Google मानचित्र स्थापित होने पर पैकेजमैनेजर से पूछने की आवश्यकता है। आईएमओ इसे वास्तव में Google मानचित्र एंड्रॉइड एपीआई वी 2 डेवलपर्स गाइड में शामिल किया जाना चाहिए ... इस मामले को याद करने वाले बहुत से देवताओं और निराश उपयोगकर्ताओं को होने जा रहे हैं।

private void setUpMapIfNeeded() { 
    // Do a null check to confirm that we have not already instantiated the map. 
    if (mMap == null) 
    { 
     // Try to obtain the map from the SupportMapFragment. 
     mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.basicMap)).getMap(); 

     if(isGoogleMapsInstalled()) 
     { 
      if (mMap != null) 
      { 
       setUpMap(); 
      } 
     } 
     else 
     { 
      Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Install Google Maps"); 
      builder.setCancelable(false); 
      builder.setPositiveButton("Install", getGoogleMapsListener()); 
      AlertDialog dialog = builder.create(); 
      dialog.show(); 
     } 
    } 
} 

public boolean isGoogleMapsInstalled() 
{ 
    try 
    { 
     ApplicationInfo info = getPackageManager().getApplicationInfo("com.google.android.apps.maps", 0); 
     return true; 
    } 
    catch(PackageManager.NameNotFoundException e) 
    { 
     return false; 
    } 
} 

public OnClickListener getGoogleMapsListener() 
{ 
    return new OnClickListener() 
    { 
     @Override 
     public void onClick(DialogInterface dialog, int which) 
     { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.google.android.apps.maps")); 
      startActivity(intent); 

      //Finish the activity so they can't circumvent the check 
      finish(); 
     } 
    }; 
} 

मैं एक छोटी ब्लॉग पोस्ट लिखा:

यहाँ कैसे करता है, तो गूगल मैप्स स्थापित कर रहे हैं की जाँच करने के लिए और (isGoogleMapsInstalled() देखें) प्ले स्टोर करता है, तो यह इंस्टॉल नहीं है गूगल मैप्स के लिए सूचीबद्ध करने के उपयोगकर्ता पुन: निर्देशित है इन विवरणों के साथ: How to check if Google Maps are installed and redirect user to the Play Store

+1

चीयर्स, चाल ने कोई समस्या नहीं की!यह वास्तव में एपीआई या कम से कम बेहतर दस्तावेज का हिस्सा होना चाहिए। –

+0

खुशी है कि यह सहायक है। मैं पूरी तरह से सहमत हूं कि यह कम से कम एपीआई दस्तावेज़ों का हिस्सा होना चाहिए ... क्यों GooglePlayServices के समान कुछ मानचित्र के लिए नहीं है? – DiscDev

+1

बहुत बहुत धन्यवाद, यह बहुत उपयोगी है। –

0

आप MapFragment.getMap (फोन करके सत्यापित कर सकते हैं कि GoogleMap उपलब्ध है या MapView.getMap() विधियों और जांचें कि लौटाई गई वस्तु शून्य नहीं है।

public GoogleMap getMap()

The GoogleMap. Null if the view of the fragment is not yet ready. This can happen if the fragment lifecyle have not gone through onCreateView(LayoutInflater, ViewGroup, Bundle) yet. This can also happen if Google Play services is not available. If Google Play services becomes available afterwards and the fragment have gone through onCreateView(LayoutInflater, ViewGroup, Bundle), calling this method again will initialize and return the GoogleMap.

आप verify map availability here पढ़ सकते हैं।

+4

में getErrorDialog विधि देखें, यह काम नहीं करता है। Google Play सेवाओं के साथ स्थापित किया गया है लेकिन Google मानचित्र इंस्टॉल नहीं है (https://play.google.com/store/apps/details?id=com.google.android.apps.maps) MapFragment.getMap() को कॉल करना गैर-शून्य है। हालांकि, कोई भी टाइल्स लोड नहीं होगा। ज़ूम बटन मौजूद हैं और दृश्य मानचित्र की तरह दिखता है, लेकिन कोई नक्शा डेटा डाउनलोड नहीं होगा और लॉग कैट रिपोर्ट: ई/Google मैप्स एंड्रॉइड एपीआई (23235): Google मानचित्र एप्लिकेशन गुम है। मुझे इसका पता लगाने का कोई तरीका चाहिए या उपयोगकर्ता ऐप की शिकायत करेंगे कि काम नहीं करता है। मेरे सेटअपMapIfNeeded विधि के साथ अद्यतन प्रश्न। – DiscDev

+0

मैंने अभी कोशिश की है कि Google मानचित्र और मानचित्र मेरे ऐप में ठीक काम करें। शायद नवीनतम Google play सेवाएं Google नक्शे के बिना मानचित्र का उपयोग करने की अनुमति देती हैं। – IlyaEremin