देता है मैं एंड्रॉइड सपोर्ट लाइब्रेरी का उपयोग कर एक नए एप्लिकेशन में नए Google मानचित्र एंड्रॉइड एपीआई v2 को शामिल करने की कोशिश कर रहा हूं। मैं कहीं और काम करने की कोशिश करने के लिए कई पुनरावृत्ति से गुज़र चुका हूं और अब मैंने छोड़ दिया है और सोचा है कि मुझे यहां पूछना चाहिए।Google मानचित्र एंड्रॉइड एपीआई v2 GooglePlayServicesNotAvailableException को फेंक देता है, पुराना है, SupportMapFragment.getMap() शून्य
मैं एपीआई कंसोल में गया, एक प्रोजेक्ट बनाया, एंड्रॉइड के लिए Google मैप्स एपीआई v2 सक्षम किया, आवश्यकतानुसार एक डीबग कुंजी बनाया और इसे मैनिफेस्ट पर चिपकाया। कोई प्रमाणीकरण समस्या या ऐसा कुछ भी नहीं। बहुत यकीन है कि मैंने यह सही किया है।
मेरी परियोजना के libs
फ़ोल्डर में मैंने android-support-v4.jar
(प्रोजेक्ट राइट-क्लिक-> एंड्रॉइड-> समर्थन लाइब्रेरी जोड़ें ...) डाल दिया है। ग्रहण में मैंने फ़ाइल-> आयात-> एंड्रॉइड-> कार्यक्षेत्र में मौजूदा एंड्रॉइड कोड किया और एंड्रॉइड-एसडीके/google/google_play_services/libproject/google-play-services_lib के नवीनतम (पुन: 3) आयात किए। तब मैं अपने प्रोजेक्ट में कोई निर्भरता पुस्तकालय के रूप में यह जोड़ा (परियोजना को राइट-क्लिक-> गुण> Android-> तल पर एक पुस्तकालय निर्भरता के रूप में यह जोड़े
मेरी प्रकट में मेरे पास है:।
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<permission
android:name="myapp.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<All the uses-permission required like INTERNET, ACCESS_NETWORK_STATE, WRITE_EXTERNAL_STORAGE, FINE AND COARSE LOCATION, etc>
<uses-permission android:name="myapp.permission.MAPS_RECEIVE"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<application ...>
...
<uses-library android:name="com.google.android.maps" />
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AI..."/>
</application>
मेरी mainview.xml में मेरे पास है:
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
अब MainView.java पर मेरे पास है:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
public class MainView extends FragmentActivity ... {
private GoogleMap mMap;
@Override
protected void onResume() {
...
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.map);
SupportMapFragment mapFragment = (SupportMapFragment)fragment;
mMap = mapFragment.getMap();
//PROBLEM: mMap is null here even though mapFragment is not
}
}
तो मैं यद्यपि , तब
//Fragments
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.map, SupportMapFragment.newInstance());
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();
मैंने कहा शायद यह SupportMapFragment
नहीं है, लेकिन मैं वास्तव में वास्तविक टुकड़ा का संदर्भ लेना चाहिए, और मेरे onResume
मैं में: ught मैं शायद सामग्री दृश्य सेट करने के बाद टुकड़े इसलिए मैं अपने onCreate
में जोड़ा प्रारंभ करने की आवश्यकता किया:
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.map);
SupportMapFragment mapFragment = (SupportMapFragment)fragment;
//Fragments
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.map, mapFragment);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();
mMap = mapFragment.getMap();
mMap
इसके बाद फिर से शून्य है।
तब मैंने देखा कि MapsInitializer
कक्षा है, इसलिए मैंने सोचा कि शायद मुझे पहले इसे कॉल करना चाहिए। चेतावनी सूचना (लाइन 313 MapsInitializer.initialize(this)
है)
try {
MapsInitializer.initialize(this);
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
इस Logcat साथ
:
तो मैं उपरोक्त कोड में टुकड़ा होने से पहले कोड जोड़ा
com.google.android.gms.common.GooglePlayServicesNotAvailableException
at com.google.android.gms.internal.n.c(Unknown Source)
at com.google.android.gms.internal.n.a(Unknown Source)
at com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
at myapp.activities.MainView.inflateSelectedViewAndSetData(MainView.java:313)
at myapp.activities.MainView.onClick(MainView.java:642)
at android.view.View.performClick(View.java:3153)
at android.view.View$PerformClick.run(View.java:12148)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:152)
at android.app.ActivityThread.main(ActivityThread.java:4615)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
मेरे प्रयास के दौरान
Logcat निम्नलिखित चेतावनी की रिपोर्ट करेगा:
Google Play services out of date. Requires 2010100 but found 1013
यह हो सकता है एक/अपराधी लेकिन मुझे कोई समाधान नहीं मिला।
इस बिंदु पर मैं विचारों से बाहर हूं। मैंने कई धागे here, here, here पढ़े लेकिन किसी भी सुझाव ने समस्या का समाधान नहीं किया। उत्तरार्द्ध में वे परियोजना निर्भरता और जार फ़ाइल समेत शामिल नहीं करने का सुझाव देते हैं। खैर, यह google-play-services.jar
या तो google-play-services_lib/libs
फ़ोल्डर से या उस परियोजना से अपना खुद का जार निर्यात करने का काम नहीं कर रहा था।
जिस तरह से मैं एक वास्तविक डिवाइस (2.3.5 और 3.2 के साथ एक टैबलेट) पर चल रहा हूं, एम्यूलेटर नहीं।
किसी भी मदद की पूरी तरह से सराहना की। :)
अद्यतन:
समाधान qubit से नीचे है।
जहाँ तक FatJar का उपयोग करें और google_play_services_lib
परियोजना (जो मैं से एक स्थानीय प्रति का निर्माण नहीं किया निर्यात करने के लिए किया जाता है पुस्तकालय निर्भरता, एक साफ रास्ता करने के लिए इसके साथ सौदा करने के लिए (जो एक दर्द जब खजाने के साथ काम कर रहा है) नहीं निर्यात क्योंकि जब यह अद्यतन होता है तो मैं फिर से आयात नहीं करना चाहता), और अपनी परियोजना में थै आउटपुट वसा जार फ़ाइल को एक और जार फ़ाइल के रूप में शामिल करें। नोट: जब वसा जार में कौन सी जार फ़ाइलों को शामिल करना है, तो मुझे annotations.jar
फ़ाइल को बाहर करना पड़ा क्योंकि यह पहले से ही शामिल था और डुप्लिकेशन के लिए त्रुटियां पैदा कर रहा था। अब मुझे अपने प्रोजेक्ट के libs
फ़ोल्डर में google_play_services_rev_3.jar
शामिल करना है और मुझे जाना अच्छा लगता है।
चूंकि यह आपकी समस्या का उत्तर नहीं है, इसलिए मैं इसे केवल टिप्पणी के रूप में दूंगा: जब आप जीपीएस/डब्ल्यूएलएएन आधारित स्थानीयकरण से अधिक नहीं करना चाहते हैं, नक्शे दिखा रहे हैं, दिखाए गए मानचित्रों में चित्रण I http://sourceforge.net/projects/libwlocate/ के कक्षाओं का उपयोग करने की अनुशंसा करते हैं। आईएमएचओ वे कई मानचित्र प्रकारों के लिए हैंडल और समर्थन प्रदान करने के लिए बहुत आसान हैं। – Elmi
यह "google_play_services_rev_3.jar" जेनेरिक, किसी भी प्रोजेक्ट और कॉन्फ़िगरेशन के लिए समान काम होना चाहिए, मुझे लगता है?फतजार के संकेत के लिए धन्यवाद, अब मुझे अपनी परियोजना जेनकिंस सीआई में इस प्रक्रिया के साथ काम कर रही है। – JaakL
@ जैकएल हाँ, यह सामान्य है और आप इसे किसी भी परियोजना पर आयात कर सकते हैं। :) – iliask