質問の説明、最初にこれを読んでください
Android2.3からAndroid4.0以降のデバイスで実行されているユーザーの位置を表示するシンプルなアプリを取得しようとしています。マップは実際のAndroid2.3デバイスには表示されません。
このアプリは現在、Android 4.0以降のデバイスで問題なく実行し、希望どおりに地図を表示できます。
Android 4.0以降では問題なく地図を表示できるので、GoogleMapsV2の設定や権限に問題はないと思います。
ただし、Android 2.3デバイスで試してみると、以下に示すスクリーンショットのようにマップ領域が空白になります。
このアプリは、ActionBarSherlock、Google Maps API v2、およびSupportMapFragmentを使用します。SDK 17、最小SDK10を対象としたビルド。
コードスニペット
関連する部分だけを表示するためにコードを貼り付けてトリミングしました。他に必要な場合はコメントを残してください。
activity_layout.xml
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/incident_padding_right" />
Activity.java
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMarkerDragListener;
import com.google.android.gms.maps.SupportMapFragment;
public class Activity extends SherlockFragmentActivity{
private static GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_layout);
............
//Set up map view
map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
............
OnMarkerDragListener markerDragListener = new OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker marker) {
// Called when the marker drag is started
}
@Override
public void onMarkerDragEnd(Marker marker) {
// Called when the marker is dropped down.
coords[0] = marker.getPosition().latitude;
coords[1] = marker.getPosition().longitude;
RestoreUIwithSavedLocation(coords);
Log.d(TAG, "Pin Dropped at: " + coords[0] + ", " + coords[1]);
}
@Override
public void onMarkerDrag(Marker marker) {
}
};
map.setOnMarkerDragListener(markerDragListener);
}
実際のAndroid2.3デバイスで実行している場合のLogcat:
01-04 21:16:52.020: D/dalvikvm(19074): VFY: dead code 0x0014-0018 in Lcom/google/android/gms/common/GooglePlayServicesUtil;.b (Landroid/content/res/Resources;)Z
01-04 21:16:52.150: W/dalvikvm(19074): Unable to resolve superclass of Lmaps/p/s; (427)
01-04 21:16:52.150: W/dalvikvm(19074): Link of class 'Lmaps/p/s;' failed
01-04 21:16:52.150: W/dalvikvm(19074): Unable to resolve superclass of Lmaps/y/bo; (3820)
01-04 21:16:52.150: W/dalvikvm(19074): Link of class 'Lmaps/y/bo;' failed
01-04 21:16:52.150: W/dalvikvm(19074): Unable to resolve superclass of Lmaps/i/k; (4208)
01-04 21:16:52.150: W/dalvikvm(19074): Link of class 'Lmaps/i/k;' failed
01-04 21:16:52.150: E/dalvikvm(19074): Could not find class 'maps.i.k', referenced from method maps.z.ag.a
01-04 21:16:52.150: W/dalvikvm(19074): VFY: unable to resolve new-instance 3540 (Lmaps/i/k;) in Lmaps/z/ag;
01-04 21:16:52.150: D/dalvikvm(19074): VFY: replacing opcode 0x22 at 0x006d
01-04 21:16:52.160: D/dalvikvm(19074): VFY: dead code 0x006f-007f in Lmaps/z/ag;.a (Landroid/view/LayoutInflater;Lcom/google/android/gms/maps/GoogleMapOptions;ZLjava/lang/String;)Lmaps/z/ag;
GoogleAPILv.10を使用してエミュレータで実行する場合のlogcat
03-25 13:00:47.974: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:47.992: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:47.992: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:48.002: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:48.002: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:48.022: W/GooglePlayServicesUtil(751): Google Play services is missing.
03-25 13:00:48.072: D/AndroidRuntime(751): Shutting down VM
03-25 13:00:48.072: W/dalvikvm(751): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-25 13:00:48.133: E/AndroidRuntime(751): FATAL EXCEPTION: main
03-25 13:00:48.133: E/AndroidRuntime(751): java.lang.RuntimeException: Unable to start activity ComponentInfo{Activity}: java.lang.NullPointerException
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.os.Looper.loop(Looper.java:130)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-25 13:00:48.133: E/AndroidRuntime(751): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 13:00:48.133: E/AndroidRuntime(751): at java.lang.reflect.Method.invoke(Method.java:507)
03-25 13:00:48.133: E/AndroidRuntime(751): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-25 13:00:48.133: E/AndroidRuntime(751): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-25 13:00:48.133: E/AndroidRuntime(751): at dalvik.system.NativeStart.main(Native Method)
03-25 13:00:48.133: E/AndroidRuntime(751): Caused by: java.lang.NullPointerException
03-25 13:00:48.133: E/AndroidRuntime(751): at Activity.onCreate(Activity.java:250)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-25 13:00:48.133: E/AndroidRuntime(751): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-25 13:00:48.133: E/AndroidRuntime(751): ... 11 more
Activity.onCreate(Activity.java:250)
この行を指しています:
map.setOnMarkerDragListener(markerDragListener);
私が試したこと
そして、この行を追加すると奇妙なことに
<uses-library android:name="com.google.android.maps" />
にAndroidManifest.xml
、logcatは何も表示せず(エラーなし、警告なし)、マップはまだ空白です。しかし、誰かがこの行が彼女/彼の白地図の問題を解決したと言っている投稿があります:https ://stackoverflow.com/questions/15595357/android-supportmapfragment-google-play-services-issue
私のプロジェクトのAndroid Dependencies
フォルダには、次の*.jar
ファイルがあります。
actionbar-sherlock-4.2-library.jar
google-play-services_lib.jar
android-support-v4.jar
actionbarsherlock-plugin-maps-4.2.0.jar
google-play-services.jar
この投稿の回答から、Googleマップがエミュレーターでうまく動作しない可能性があることを認識しています。必要なのは、失敗した実際のAndroid2.3デバイスにマップを表示することだけです。
さらに、私はこれらの投稿にも細心の注意を払い、それらの方法を試しました(私の状況に該当する場合)が、それでも私の問題には喜びがありません:
APIレベル10でGoogleMapsAPI v2を使用するにはどうすればよいですか?
Google MapFragmentは空白(白)で、クラス'maps.jk'が見つかりませんでした
新しいSupportMapFragmentでのActionBarSherlockの使用
さらに詳しい情報が必要な場合は、下にコメントを残してください。追加しようと思います。