エミュレータでGoogleマップを動かそうとしています。私は実機でコードを起動できましたが、エミュレータは別の話です。
そのためにGoogle API 18でエミュレータを使用しようとしています。ただし、最小 SDK は 15 です。
エミュレーターで得たのは、下部の書き込みコーナーに +/- コントロールがある空の画面だけです。
マップを実行すると、Logcat に次のメッセージが表示されます。
09-30 12:35:27.761: ERROR/Google Maps Android API(1327): Google Maps Android API v2 only supports devices with OpenGL ES 2.0 and above
09-30 12:35:28.441: WARN/EGL_emulation(1327): eglSurfaceAttrib not implemented
09-30 12:36:16.741: ERROR/CheckinTask(550): Checkin failed: https://android.clients.google.com/checkin (request #0): java.net.SocketTimeoutException
09-30 12:37:01.003: ERROR/CheckinTask(550): SSL error, attempting time correction: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a2d2368: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x59bf16ba:0x00000000)
09-30 12:38:01.201: ERROR/CheckinTask(550): Checkin failed: https://android.clients.google.com/checkin (request #0): java.net.SocketTimeoutException
09-30 12:38:17.482: WARN/Uploader(545): No account for auth token provided 09-30
12:39:10.121: ERROR/CheckinTask(550): SSL error, attempting time correction: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a2daaa0: Failure in SSL library, usually a protocol error
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:766 0x59bf16ba:0x00000000)
09-30 12:40:10.381: ERROR/CheckinTask(550): Checkin failed: https://android.clients.google.com/checkin (request #0): java.net.SocketTimeoutException
これが私のマニフェストです。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.Mapper"
android:versionCode="1"
android:versionName="1.0">
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<uses-sdk android:minSdkVersion="15"
android:targetSdkVersion="17"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- The following two permissions are not required to use
Google Maps Android API v2, but are recommended. -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<uses-library android:name="com.google.android.maps"/>
<activity android:name="MyActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="MY_API_GENERATED_KEY_IS_HERE"/>
</application>
</manifest>
レイアウト main.xml
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
アクティビティコードは次のとおりです
package com.example.Mapper;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
public class MyActivity extends Activity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
Log.w("........................","................................................");
super.onCreate(savedInstanceState);
Integer resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(MyActivity.this);
if (resultCode == ConnectionResult.SUCCESS) {
setContentView(R.layout.main);
} else {
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, MyActivity.this, 0);
if (dialog != null) {
//This dialog will help the user update to the latest GooglePlayServices
dialog.show();
}
}
}
}
デバイスで SSL エラーが発生せず、エミュレータを使用するとエラーが発生する理由がわかりません。手伝ってください。
ありがとうございました。