我试图将新的谷歌地图API的Android进入V2采用了Android支持库的应用程序。 我已经经历了许多次迭代去尝试得到的地方工作,现在我已经放弃了,我想我应该问在这里。
我去了API控制台,创建了一个项目,使谷歌地图API第2版的Android,根据需要创建调试KEY并粘贴它的清单。 没有身份验证问题或类似的东西。 肯定我没这个权利。
在我的项目的libs
文件夹,我把android-support-v4.jar
(通过项目右键单击- > Android->添加支持库...)。 在Eclipse中我做文件 - >导入 - > Android->将现有Android代码进入工作区,并引进国外最新(REV 3)Android的SDK的/谷歌/ google_play_services / libproject /谷歌播放services_lib。 然后,我添加它作为一个依赖库到我的项目(项目右键单击 - >属性 - > 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
}
}
后来我想我可能需要初始化片段,我在加onCreate
设置内容视图后:
//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
我所做的:
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
类,所以我想也许我应该先调用。
所以我添加的代码获取片段在上面的代码之前:
try {
MapsInitializer.initialize(this);
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
有了这个logcat的报告警告(线313是MapsInitializer.initialize(this)
):
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
这可能是一个/罪魁祸首,但我没有找到解决办法。
在这一点上,我的想法。 我看了几个线程这里 , 这里 , 这里却没有任何的建议,解决了这个问题。 关于后者,他们建议不包括项目的依赖,只是包括jar文件。 嗯,没有使用任何工作无论是google-play-services.jar
从google-play-services_lib/libs
文件夹或导出我自己的罐子从该项目。
顺便说一句,我的实际设备(2.3.5和3.2平板电脑),而不是模拟器上运行。
任何帮助,竭诚赞赏。 :)
更新:
该解决方案下面是由量子位。
至于出口的库的依赖,一种巧妙的方法没有处理它(这是与库打交道时有疼痛感)是使用FatJar和导出google_play_services_lib
项目(我没有创建一个本地副本的,因为当它更新我不想重新导入),并在项目中包含的另一个jar文件THA输出脂肪jar文件。 注:选择在脂肪罐子包括jar文件,我不得不排除annotations.jar
文件,因为它已经被预先包含并导致错误的重复。 现在我需要做的是包括google_play_services_rev_3.jar
在我的项目的libs
文件夹,我好去。