GoogleApiClient.connect() 导致强制关闭
GoogleApiClient.connect() results in force close
首先我发现这个问题之前已经问过2次了,但是都没有标注答案,也没有解决问题的答案。
我是第一次实现Google Sign-In
。但是,GoogleApiClient.connect();
导致应用力关闭。我不知道为什么。任何的想法?谢谢
代码:
package com.example.fujitsu.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.games.Games;
import com.google.example.games.basegameutils.BaseGameUtils;
public class MainActivity extends Activity implements
View.OnClickListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private GoogleApiClient mGoogleApiClient;
private static int RC_SIGN_IN = 9001;
private boolean mResolvingConnectionFailure = false;
private boolean mAutoStartSignInFlow = true;
private boolean mSignInClicked = false;
boolean mExplicitSignOut = false;
boolean mInSignInFlow = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the Google Api Client with access to the Play Games services
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
.build();
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
if (!mInSignInFlow && !mExplicitSignOut) {
// auto sign in
mGoogleApiClient.connect();
}
}
@Override
protected void onStop() {
super.onStop();
mGoogleApiClient.disconnect();
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.sign_in_button) {
// start the asynchronous sign in flow
mSignInClicked = true;
mGoogleApiClient.connect();
}
else if (view.getId() == R.id.sign_out_button) {
// sign out.
mSignInClicked = false;
// user explicitly signed out, so turn off auto sign in
mExplicitSignOut = true;
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
Games.signOut(mGoogleApiClient);
mGoogleApiClient.disconnect();
}
// show sign-in button, hide the sign-out button
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_button).setVisibility(View.GONE);
}
}
@Override
public void onConnected(Bundle connectionHint) {
// show sign-out button, hide the sign-in button
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (mResolvingConnectionFailure) {
// already resolving
return;
}
// if the sign-in button was clicked or if auto sign-in is enabled,
// launch the sign-in flow
if (mSignInClicked || mAutoStartSignInFlow) {
mAutoStartSignInFlow = false;
mSignInClicked = false;
mResolvingConnectionFailure = true;
if (!BaseGameUtils.resolveConnectionFailure(this,
mGoogleApiClient, connectionResult,
RC_SIGN_IN, "There was an issue with sign-in, please try again later.")) {
mResolvingConnectionFailure = false;
}
}
}
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (requestCode == RC_SIGN_IN) {
mSignInClicked = false;
mResolvingConnectionFailure = false;
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
} else {
BaseGameUtils.showActivityResultError(this,
requestCode, resultCode, R.string.signin_failure);
}
}
}
@Override
public void onConnectionSuspended(int i) {
// Attempt to reconnect
mGoogleApiClient.connect();
}
}
Android 清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fujitsu.myapplication" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Logcat:
libcore.io.ErrnoException: close failed: EBADF (Bad file number)
at libcore.io.Posix.close(Native Method)
at libcore.io.BlockGuardOs.close(BlockGuardOs.java:75)
at com.android.internal.os.ZygoteInit.closeServerSocket(ZygoteInit.java:221)
at com.android.internal.os.ZygoteConnection.handleChildProc(ZygoteConnection.java:879)
at com.android.internal.os.ZygoteConnection.runOnce(ZygoteConnection.java:242)
at com.android.internal.os.ZygoteInit.runSelectLoop(ZygoteInit.java:713)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649)
at dalvik.system.NativeStart.main(Native Method)
08-11 14:08:46.883 24869-24881/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=9: interp stack at 0x5f551000
08-11 14:08:46.883 24869-24881/com.example.fujitsu.myapplication D/dalvikvm﹕ init ref table
08-11 14:08:46.883 24869-24881/com.example.fujitsu.myapplication D/dalvikvm﹕ init mutex
08-11 14:08:46.884 24869-24882/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=10: interp stack at 0x5f66f000
08-11 14:08:46.884 24869-24882/com.example.fujitsu.myapplication D/dalvikvm﹕ init ref table
08-11 14:08:46.884 24869-24882/com.example.fujitsu.myapplication D/dalvikvm﹕ init mutex
08-11 14:08:46.929 24869-24869/com.example.fujitsu.myapplication V/SettingsProviderInterface﹕ invalidate [system]: current 59 != cached 0
08-11 14:08:46.931 24869-24869/com.example.fujitsu.myapplication D/ActivityThread﹕ hoder:android.app.IActivityManager$ContentProviderHolder@4266d840,provider,holder.Provider:android.content.ContentProviderProxy@4266dfb8
08-11 14:08:46.934 24869-24869/com.example.fujitsu.myapplication D/asset﹕ AssetManager-->addDefaultAssets CIP path not exsit!
08-11 14:08:46.960 24869-24869/com.example.fujitsu.myapplication D/Proxy﹕ setHttpRequestCheckHandler
08-11 14:08:46.961 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ open_cached_dex_file : /data/app/com.example.fujitsu.myapplication-1.apk /data/dalvik-cache/data@app@com.example.fujitsu.myapplication-1.apk@classes.dex
08-11 14:08:46.970 24869-24869/com.example.fujitsu.myapplication D/ActivityThread﹕ BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{4266ace8 com.example.fujitsu.myapplication}}
08-11 14:08:46.971 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Handling launch of ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}
08-11 14:08:47.021 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}: app=android.app.Application@42672248, appName=com.example.fujitsu.myapplication, pkg=com.example.fujitsu.myapplication, comp={com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}, dir=/data/app/com.example.fujitsu.myapplication-1.apk
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ create interp thread : stack size=128KB
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ create new thread
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ new thread created
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ update thread list
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=11: interp stack at 0x5fd9e000
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ init ref table
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ init mutex
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=11: created from interp
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ start new thread
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=11: notify debugger
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=11 (LaunchIconThemeResource): calling run()
08-11 14:08:47.033 24869-24869/com.example.fujitsu.myapplication D/asset﹕ AssetManager-->addDefaultAssets CIP path not exsit!
08-11 14:08:47.062 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.example.fujitsu.myapplication asetfile:null
08-11 14:08:47.063 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.example.fujitsu.myapplication asetfile:null
08-11 14:08:47.128 24869-24869/com.example.fujitsu.myapplication I/dalvikvm﹕ Could not find method android.app.Notification$Builder.setLocalOnly, referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zza
08-11 14:08:47.128 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ VFY: unable to resolve virtual method 245: Landroid/app/Notification$Builder;.setLocalOnly (Z)Landroid/app/Notification$Builder;
08-11 14:08:47.128 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x00c2
08-11 14:08:47.130 24869-24869/com.example.fujitsu.myapplication I/dalvikvm﹕ Could not find method android.content.pm.PackageManager.getPackageInstaller, referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zzh
08-11 14:08:47.130 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ VFY: unable to resolve virtual method 535: Landroid/content/pm/PackageManager;.getPackageInstaller ()Landroid/content/pm/PackageInstaller;
08-11 14:08:47.130 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000b
08-11 14:08:47.131 24869-24869/com.example.fujitsu.myapplication D/asset﹕ AssetManager-->addDefaultAssets CIP path not exsit!
08-11 14:08:47.193 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ open_cached_dex_file : /system/framework/com.android.location.provider.jar /data/dalvik-cache/system@framework@com.android.location.provider.jar@classes.dex
08-11 14:08:47.194 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ open_cached_dex_file : /system/framework/com.android.media.remotedisplay.jar /data/dalvik-cache/system@framework@com.android.media.remotedisplay.jar@classes.dex
08-11 14:08:47.197 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ open_cached_dex_file : /data/app/com.google.android.gms-1.apk /data/dalvik-cache/data@app@com.google.android.gms-1.apk@classes.dex
08-11 14:08:47.227 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.example.fujitsu.myapplication asetfile:null
08-11 14:08:47.243 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.253 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.259 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.262 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.264 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.268 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.281 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.example.fujitsu.myapplication asetfile:null
08-11 14:08:47.316 24869-24869/com.example.fujitsu.myapplication W/PopupManager﹕ You have not specified a View to use as content view for popups. Falling back to the Activity content view. Note that this may not work as expected in multi-screen environments
08-11 14:08:47.317 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Performing resume of ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}} finished=false
08-11 14:08:47.317 24869-24869/com.example.fujitsu.myapplication D/ActivityThread﹕ ACT-AM_ON_RESUME_CALLED ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}
08-11 14:08:47.317 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Resume ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}} started activity: false, hideForNow: false, finished: false
08-11 14:08:47.317 24869-24869/com.example.fujitsu.myapplication V/PhoneWindow﹕ DecorView setVisiblity: visibility = 4 ,Parent =null, this =com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 I.E..... R.....ID 0,0-0,0}
08-11 14:08:47.326 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Resuming ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}} with isForward=true
08-11 14:08:47.326 24869-24869/com.example.fujitsu.myapplication V/PhoneWindow﹕ DecorView setVisiblity: visibility = 0 ,Parent =ViewRoot{4271dc00 com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity,ident = 0}, this =com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 V.E..... R.....ID 0,0-0,0}
08-11 14:08:47.326 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Scheduling idle handler for ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}
08-11 14:08:47.327 24869-24869/com.example.fujitsu.myapplication D/ActivityThread﹕ ACT-LAUNCH_ACTIVITY handled : 0 / ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}
08-11 14:08:47.338 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ FontThemeManager createThemeFont typefacetype=2, curfontpath=/system/fonts/DroidSansFallback.ttf
08-11 14:08:47.404 24869-24869/com.example.fujitsu.myapplication D/GraphicBuffer﹕ create handle(0x622ea9b0) (w:736, h:1280, f:1)
08-11 14:08:47.407 24869-24869/com.example.fujitsu.myapplication D/OpenGLRenderer﹕ Enabling debug mode 0
08-11 14:08:47.408 24869-24869/com.example.fujitsu.myapplication D/GraphicBuffer﹕ create handle(0x626ad790) (w:1984, h:1472, f:1)
08-11 14:08:47.417 24869-24869/com.example.fujitsu.myapplication D/OpenGLRenderer﹕ setViewport 720x1280 <0x622eaad8>
08-11 14:08:47.418 24869-24869/com.example.fujitsu.myapplication V/InputMethodManager﹕ onWindowFocus: null softInputMode=288 first=true flags=#1810100
08-11 14:08:47.418 24869-24869/com.example.fujitsu.myapplication V/InputMethodManager﹕ START INPUT: com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 V.E..... R.....ID 0,0-720,1280} ic=null tba=android.view.inputmethod.EditorInfo@4272b720 controlFlags=#104
08-11 14:08:47.423 24869-24889/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=12: interp stack at 0x63306000
08-11 14:08:47.423 24869-24889/com.example.fujitsu.myapplication D/dalvikvm﹕ init ref table
08-11 14:08:47.423 24869-24889/com.example.fujitsu.myapplication D/dalvikvm﹕ init mutex
08-11 14:08:49.603 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to android.widget.RelativeLayout{4267ffc0 V.E..... ......I. 0,0-720,1230}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=150.79057, y[0]=143.84856, Xw[0]=32.0, Yw[0]=32.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442457, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:49.603 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to android.widget.FrameLayout{4267ef40 V.ED.... ......I. 0,50-720,1280 #1020002 android:id/content}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=150.79057, y[0]=143.84856, Xw[0]=32.0, Yw[0]=32.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442457, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:49.604 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to android.widget.LinearLayout{4267b400 V.E..... ......I. 0,0-720,1280}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=150.79057, y[0]=193.84856, Xw[0]=32.0, Yw[0]=32.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442457, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:49.604 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 V.E..... R.....I. 0,0-720,1280}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=150.79057, y[0]=193.84856, Xw[0]=32.0, Yw[0]=32.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442457, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:49.715 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch up dispatch to com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 V.E..... R.....I. 0,0-720,1280}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=149.79196, y[0]=193.84856, Xw[0]=33.0, Yw[0]=33.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442570, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:56.147 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to com.google.android.gms.common.internal.cq{42690b00 VFED..C. ........ 0,0-216,96}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=133.76978, y[0]=50.89618, Xw[0]=64.0, Yw[0]=64.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35448999, downTime=35448999, deviceId=3, source=0x1002 }
08-11 14:08:56.168 24869-24869/com.example.fujitsu.myapplication D/GraphicBuffer﹕ create handle(0x633c3b28) (w:736, h:1280, f:1)
08-11 14:08:56.317 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch up dispatch to com.google.android.gms.common.internal.cq{42690b00 VFED..C. ...P.... 0,0-216,96}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=132.77115, y[0]=50.89618, Xw[0]=49.0, Yw[0]=49.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35449172, downTime=35448999, deviceId=3, source=0x1002 }
08-11 14:08:56.337 24869-24869/com.example.fujitsu.myapplication D/GraphicBuffer﹕ create handle(0x6332fc28) (w:736, h:1280, f:1)
08-11 14:08:56.452 24869-24869/com.example.fujitsu.myapplication D/AndroidRuntime﹕ Shutting down VM
08-11 14:08:56.452 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4190cc98)
08-11 14:08:56.452 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ threadid=1: uncaught exception occurred
08-11 14:08:56.452 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
08-11 14:08:56.461 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.google.android.gms.common.internal.zzi$zza.zzc(Unknown Source)
08-11 14:08:56.462 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.google.android.gms.common.internal.zzi$zza.zzr(Unknown Source)
08-11 14:08:56.462 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.google.android.gms.common.internal.zzi$zzc.zznQ(Unknown Source)
08-11 14:08:56.462 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.google.android.gms.common.internal.zzi$zzb.handleMessage(Unknown Source)
08-11 14:08:56.462 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:110)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at android.os.Looper.loop(Looper.java:193)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5395)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:837)
08-11 14:08:56.464 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)
08-11 14:08:56.464 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
08-11 14:08:56.464 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ threadid=1: calling UncaughtExceptionHandler
08-11 14:08:56.465 24869-24869/com.example.fujitsu.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.fujitsu.myapplication, PID: 24869
java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
at com.google.android.gms.common.internal.zzi$zza.zzc(Unknown Source)
at com.google.android.gms.common.internal.zzi$zza.zzr(Unknown Source)
at com.google.android.gms.common.internal.zzi$zzc.zznQ(Unknown Source)
at com.google.android.gms.common.internal.zzi$zzb.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5395)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:837)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)
at dalvik.system.NativeStart.main(Native Method)
您可以按照以下步骤解决此问题,
第一步:首先在开发者控制台启用google+API。从开发人员控制台创建新的客户端 ID。
第 2 步:向我们的项目添加 google 播放服务。
第 3 步:在清单中声明权限。
第 4 步:为您的应用程序初始化 Google API 客户端,
First check for availability of Google Play Services by calling checkPlayServices()
in onResume()
Once play services are available on the device, build the GoogleApiClient
by calling buildGoogleApiClient()
method.
Connect to google API client by calling mGoogleApiClient.connect()
in onStart()
method. By calling this, onConnectionFailed()
, onConnected()
and onConnectionSuspended()
will be triggered depending upon the connection status.
Once google API is successfully connected,
// show sign-out button, hide the sign-in button
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);
应该在onConnected()
方法中调用。
如果理解有困难,请关注
https://developers.google.com/+/mobile/android/getting-started
首先我发现这个问题之前已经问过2次了,但是都没有标注答案,也没有解决问题的答案。
我是第一次实现Google Sign-In
。但是,GoogleApiClient.connect();
导致应用力关闭。我不知道为什么。任何的想法?谢谢
代码:
package com.example.fujitsu.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.games.Games;
import com.google.example.games.basegameutils.BaseGameUtils;
public class MainActivity extends Activity implements
View.OnClickListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private GoogleApiClient mGoogleApiClient;
private static int RC_SIGN_IN = 9001;
private boolean mResolvingConnectionFailure = false;
private boolean mAutoStartSignInFlow = true;
private boolean mSignInClicked = false;
boolean mExplicitSignOut = false;
boolean mInSignInFlow = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the Google Api Client with access to the Play Games services
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Games.API).addScope(Games.SCOPE_GAMES)
.build();
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
if (!mInSignInFlow && !mExplicitSignOut) {
// auto sign in
mGoogleApiClient.connect();
}
}
@Override
protected void onStop() {
super.onStop();
mGoogleApiClient.disconnect();
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.sign_in_button) {
// start the asynchronous sign in flow
mSignInClicked = true;
mGoogleApiClient.connect();
}
else if (view.getId() == R.id.sign_out_button) {
// sign out.
mSignInClicked = false;
// user explicitly signed out, so turn off auto sign in
mExplicitSignOut = true;
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
Games.signOut(mGoogleApiClient);
mGoogleApiClient.disconnect();
}
// show sign-in button, hide the sign-out button
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_button).setVisibility(View.GONE);
}
}
@Override
public void onConnected(Bundle connectionHint) {
// show sign-out button, hide the sign-in button
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (mResolvingConnectionFailure) {
// already resolving
return;
}
// if the sign-in button was clicked or if auto sign-in is enabled,
// launch the sign-in flow
if (mSignInClicked || mAutoStartSignInFlow) {
mAutoStartSignInFlow = false;
mSignInClicked = false;
mResolvingConnectionFailure = true;
if (!BaseGameUtils.resolveConnectionFailure(this,
mGoogleApiClient, connectionResult,
RC_SIGN_IN, "There was an issue with sign-in, please try again later.")) {
mResolvingConnectionFailure = false;
}
}
}
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (requestCode == RC_SIGN_IN) {
mSignInClicked = false;
mResolvingConnectionFailure = false;
if (resultCode == RESULT_OK) {
mGoogleApiClient.connect();
} else {
BaseGameUtils.showActivityResultError(this,
requestCode, resultCode, R.string.signin_failure);
}
}
}
@Override
public void onConnectionSuspended(int i) {
// Attempt to reconnect
mGoogleApiClient.connect();
}
}
Android 清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fujitsu.myapplication" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Logcat:
libcore.io.ErrnoException: close failed: EBADF (Bad file number)
at libcore.io.Posix.close(Native Method)
at libcore.io.BlockGuardOs.close(BlockGuardOs.java:75)
at com.android.internal.os.ZygoteInit.closeServerSocket(ZygoteInit.java:221)
at com.android.internal.os.ZygoteConnection.handleChildProc(ZygoteConnection.java:879)
at com.android.internal.os.ZygoteConnection.runOnce(ZygoteConnection.java:242)
at com.android.internal.os.ZygoteInit.runSelectLoop(ZygoteInit.java:713)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649)
at dalvik.system.NativeStart.main(Native Method)
08-11 14:08:46.883 24869-24881/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=9: interp stack at 0x5f551000
08-11 14:08:46.883 24869-24881/com.example.fujitsu.myapplication D/dalvikvm﹕ init ref table
08-11 14:08:46.883 24869-24881/com.example.fujitsu.myapplication D/dalvikvm﹕ init mutex
08-11 14:08:46.884 24869-24882/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=10: interp stack at 0x5f66f000
08-11 14:08:46.884 24869-24882/com.example.fujitsu.myapplication D/dalvikvm﹕ init ref table
08-11 14:08:46.884 24869-24882/com.example.fujitsu.myapplication D/dalvikvm﹕ init mutex
08-11 14:08:46.929 24869-24869/com.example.fujitsu.myapplication V/SettingsProviderInterface﹕ invalidate [system]: current 59 != cached 0
08-11 14:08:46.931 24869-24869/com.example.fujitsu.myapplication D/ActivityThread﹕ hoder:android.app.IActivityManager$ContentProviderHolder@4266d840,provider,holder.Provider:android.content.ContentProviderProxy@4266dfb8
08-11 14:08:46.934 24869-24869/com.example.fujitsu.myapplication D/asset﹕ AssetManager-->addDefaultAssets CIP path not exsit!
08-11 14:08:46.960 24869-24869/com.example.fujitsu.myapplication D/Proxy﹕ setHttpRequestCheckHandler
08-11 14:08:46.961 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ open_cached_dex_file : /data/app/com.example.fujitsu.myapplication-1.apk /data/dalvik-cache/data@app@com.example.fujitsu.myapplication-1.apk@classes.dex
08-11 14:08:46.970 24869-24869/com.example.fujitsu.myapplication D/ActivityThread﹕ BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{4266ace8 com.example.fujitsu.myapplication}}
08-11 14:08:46.971 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Handling launch of ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}
08-11 14:08:47.021 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}: app=android.app.Application@42672248, appName=com.example.fujitsu.myapplication, pkg=com.example.fujitsu.myapplication, comp={com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}, dir=/data/app/com.example.fujitsu.myapplication-1.apk
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ create interp thread : stack size=128KB
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ create new thread
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ new thread created
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ update thread list
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=11: interp stack at 0x5fd9e000
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ init ref table
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ init mutex
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=11: created from interp
08-11 14:08:47.025 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ start new thread
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=11: notify debugger
08-11 14:08:47.025 24869-24886/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=11 (LaunchIconThemeResource): calling run()
08-11 14:08:47.033 24869-24869/com.example.fujitsu.myapplication D/asset﹕ AssetManager-->addDefaultAssets CIP path not exsit!
08-11 14:08:47.062 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.example.fujitsu.myapplication asetfile:null
08-11 14:08:47.063 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.example.fujitsu.myapplication asetfile:null
08-11 14:08:47.128 24869-24869/com.example.fujitsu.myapplication I/dalvikvm﹕ Could not find method android.app.Notification$Builder.setLocalOnly, referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zza
08-11 14:08:47.128 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ VFY: unable to resolve virtual method 245: Landroid/app/Notification$Builder;.setLocalOnly (Z)Landroid/app/Notification$Builder;
08-11 14:08:47.128 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x00c2
08-11 14:08:47.130 24869-24869/com.example.fujitsu.myapplication I/dalvikvm﹕ Could not find method android.content.pm.PackageManager.getPackageInstaller, referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zzh
08-11 14:08:47.130 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ VFY: unable to resolve virtual method 535: Landroid/content/pm/PackageManager;.getPackageInstaller ()Landroid/content/pm/PackageInstaller;
08-11 14:08:47.130 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000b
08-11 14:08:47.131 24869-24869/com.example.fujitsu.myapplication D/asset﹕ AssetManager-->addDefaultAssets CIP path not exsit!
08-11 14:08:47.193 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ open_cached_dex_file : /system/framework/com.android.location.provider.jar /data/dalvik-cache/system@framework@com.android.location.provider.jar@classes.dex
08-11 14:08:47.194 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ open_cached_dex_file : /system/framework/com.android.media.remotedisplay.jar /data/dalvik-cache/system@framework@com.android.media.remotedisplay.jar@classes.dex
08-11 14:08:47.197 24869-24869/com.example.fujitsu.myapplication D/dalvikvm﹕ open_cached_dex_file : /data/app/com.google.android.gms-1.apk /data/dalvik-cache/data@app@com.google.android.gms-1.apk@classes.dex
08-11 14:08:47.227 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.example.fujitsu.myapplication asetfile:null
08-11 14:08:47.243 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.253 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.259 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.262 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.264 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.268 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.google.android.gms asetfile:null
08-11 14:08:47.281 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ LaunchIconThemeResourcegetDrawable packageName:com.example.fujitsu.myapplication asetfile:null
08-11 14:08:47.316 24869-24869/com.example.fujitsu.myapplication W/PopupManager﹕ You have not specified a View to use as content view for popups. Falling back to the Activity content view. Note that this may not work as expected in multi-screen environments
08-11 14:08:47.317 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Performing resume of ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}} finished=false
08-11 14:08:47.317 24869-24869/com.example.fujitsu.myapplication D/ActivityThread﹕ ACT-AM_ON_RESUME_CALLED ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}
08-11 14:08:47.317 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Resume ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}} started activity: false, hideForNow: false, finished: false
08-11 14:08:47.317 24869-24869/com.example.fujitsu.myapplication V/PhoneWindow﹕ DecorView setVisiblity: visibility = 4 ,Parent =null, this =com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 I.E..... R.....ID 0,0-0,0}
08-11 14:08:47.326 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Resuming ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}} with isForward=true
08-11 14:08:47.326 24869-24869/com.example.fujitsu.myapplication V/PhoneWindow﹕ DecorView setVisiblity: visibility = 0 ,Parent =ViewRoot{4271dc00 com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity,ident = 0}, this =com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 V.E..... R.....ID 0,0-0,0}
08-11 14:08:47.326 24869-24869/com.example.fujitsu.myapplication V/ActivityThread﹕ Scheduling idle handler for ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}
08-11 14:08:47.327 24869-24869/com.example.fujitsu.myapplication D/ActivityThread﹕ ACT-LAUNCH_ACTIVITY handled : 0 / ActivityRecord{4266c7a8 token=android.os.BinderProxy@4266bd30 {com.example.fujitsu.myapplication/com.example.fujitsu.myapplication.MainActivity}}
08-11 14:08:47.338 24869-24869/com.example.fujitsu.myapplication D/jiayh2﹕ FontThemeManager createThemeFont typefacetype=2, curfontpath=/system/fonts/DroidSansFallback.ttf
08-11 14:08:47.404 24869-24869/com.example.fujitsu.myapplication D/GraphicBuffer﹕ create handle(0x622ea9b0) (w:736, h:1280, f:1)
08-11 14:08:47.407 24869-24869/com.example.fujitsu.myapplication D/OpenGLRenderer﹕ Enabling debug mode 0
08-11 14:08:47.408 24869-24869/com.example.fujitsu.myapplication D/GraphicBuffer﹕ create handle(0x626ad790) (w:1984, h:1472, f:1)
08-11 14:08:47.417 24869-24869/com.example.fujitsu.myapplication D/OpenGLRenderer﹕ setViewport 720x1280 <0x622eaad8>
08-11 14:08:47.418 24869-24869/com.example.fujitsu.myapplication V/InputMethodManager﹕ onWindowFocus: null softInputMode=288 first=true flags=#1810100
08-11 14:08:47.418 24869-24869/com.example.fujitsu.myapplication V/InputMethodManager﹕ START INPUT: com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 V.E..... R.....ID 0,0-720,1280} ic=null tba=android.view.inputmethod.EditorInfo@4272b720 controlFlags=#104
08-11 14:08:47.423 24869-24889/com.example.fujitsu.myapplication D/dalvikvm﹕ threadid=12: interp stack at 0x63306000
08-11 14:08:47.423 24869-24889/com.example.fujitsu.myapplication D/dalvikvm﹕ init ref table
08-11 14:08:47.423 24869-24889/com.example.fujitsu.myapplication D/dalvikvm﹕ init mutex
08-11 14:08:49.603 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to android.widget.RelativeLayout{4267ffc0 V.E..... ......I. 0,0-720,1230}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=150.79057, y[0]=143.84856, Xw[0]=32.0, Yw[0]=32.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442457, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:49.603 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to android.widget.FrameLayout{4267ef40 V.ED.... ......I. 0,50-720,1280 #1020002 android:id/content}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=150.79057, y[0]=143.84856, Xw[0]=32.0, Yw[0]=32.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442457, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:49.604 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to android.widget.LinearLayout{4267b400 V.E..... ......I. 0,0-720,1280}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=150.79057, y[0]=193.84856, Xw[0]=32.0, Yw[0]=32.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442457, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:49.604 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 V.E..... R.....I. 0,0-720,1280}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=150.79057, y[0]=193.84856, Xw[0]=32.0, Yw[0]=32.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442457, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:49.715 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch up dispatch to com.android.internal.policy.impl.PhoneWindow$DecorView{4267a318 V.E..... R.....I. 0,0-720,1280}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=149.79196, y[0]=193.84856, Xw[0]=33.0, Yw[0]=33.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35442570, downTime=35442457, deviceId=3, source=0x1002 }
08-11 14:08:56.147 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch down dispatch to com.google.android.gms.common.internal.cq{42690b00 VFED..C. ........ 0,0-216,96}, event = MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=133.76978, y[0]=50.89618, Xw[0]=64.0, Yw[0]=64.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35448999, downTime=35448999, deviceId=3, source=0x1002 }
08-11 14:08:56.168 24869-24869/com.example.fujitsu.myapplication D/GraphicBuffer﹕ create handle(0x633c3b28) (w:736, h:1280, f:1)
08-11 14:08:56.317 24869-24869/com.example.fujitsu.myapplication I/View﹕ Touch up dispatch to com.google.android.gms.common.internal.cq{42690b00 VFED..C. ...P.... 0,0-216,96}, event = MotionEvent { action=ACTION_UP, id[0]=0, x[0]=132.77115, y[0]=50.89618, Xw[0]=49.0, Yw[0]=49.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=35449172, downTime=35448999, deviceId=3, source=0x1002 }
08-11 14:08:56.337 24869-24869/com.example.fujitsu.myapplication D/GraphicBuffer﹕ create handle(0x6332fc28) (w:736, h:1280, f:1)
08-11 14:08:56.452 24869-24869/com.example.fujitsu.myapplication D/AndroidRuntime﹕ Shutting down VM
08-11 14:08:56.452 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4190cc98)
08-11 14:08:56.452 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ threadid=1: uncaught exception occurred
08-11 14:08:56.452 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
08-11 14:08:56.461 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.google.android.gms.common.internal.zzi$zza.zzc(Unknown Source)
08-11 14:08:56.462 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.google.android.gms.common.internal.zzi$zza.zzr(Unknown Source)
08-11 14:08:56.462 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.google.android.gms.common.internal.zzi$zzc.zznQ(Unknown Source)
08-11 14:08:56.462 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.google.android.gms.common.internal.zzi$zzb.handleMessage(Unknown Source)
08-11 14:08:56.462 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:110)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at android.os.Looper.loop(Looper.java:193)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5395)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
08-11 14:08:56.463 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:837)
08-11 14:08:56.464 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)
08-11 14:08:56.464 24869-24869/com.example.fujitsu.myapplication W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
08-11 14:08:56.464 24869-24869/com.example.fujitsu.myapplication W/dalvikvm﹕ threadid=1: calling UncaughtExceptionHandler
08-11 14:08:56.465 24869-24869/com.example.fujitsu.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.fujitsu.myapplication, PID: 24869
java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
at com.google.android.gms.common.internal.zzi$zza.zzc(Unknown Source)
at com.google.android.gms.common.internal.zzi$zza.zzr(Unknown Source)
at com.google.android.gms.common.internal.zzi$zzc.zznQ(Unknown Source)
at com.google.android.gms.common.internal.zzi$zzb.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5395)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:837)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)
at dalvik.system.NativeStart.main(Native Method)
您可以按照以下步骤解决此问题, 第一步:首先在开发者控制台启用google+API。从开发人员控制台创建新的客户端 ID。
第 2 步:向我们的项目添加 google 播放服务。
第 3 步:在清单中声明权限。
第 4 步:为您的应用程序初始化 Google API 客户端,
First check for availability of Google Play Services by calling
checkPlayServices()
inonResume()
Once play services are available on the device, build the
GoogleApiClient
by callingbuildGoogleApiClient()
method.Connect to google API client by calling
mGoogleApiClient.connect()
inonStart()
method. By calling this,onConnectionFailed()
,onConnected()
andonConnectionSuspended()
will be triggered depending upon the connection status.Once google API is successfully connected, // show sign-out button, hide the sign-in button
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);
应该在onConnected()
方法中调用。
如果理解有困难,请关注 https://developers.google.com/+/mobile/android/getting-started