我正在开发一个应用程序,它有一个带有google plus登录按钮的LoginActivity.我已经在google的api控制台中启用了Google+ API并创建了一个Oauth帐户.
这是我的代码的相关部分:
活动类声明:
public class LoginActivity extends Activity implements OnClickListener, ConnectionCallbacks, OnConnectionFailedListener, PlusClient.OnAccessRevokedListener { private PlusClient mPlusClient; private ConnectionResult mConnectionResult; private static final int REQUEST_CODE_SIGN_IN = 2
的onCreate:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mPlusClient = new PlusClient.Builder(this, this, this) .setActions("http://schemas.google.com/AddActivity").build();
的onClick:
public void onClick(View view) { Utils.LOGD("onClick - View = " + view); if (view.getId() == R.id.sign_in_button) { Utils.LOGD("onClick : mPlusClient status = " + mPlusClient); if (mPlusClient.isConnected()) { Utils.LOGD("onClick - mPlusClient is connected"); Toast.makeText(this, "you are already signed in!", Toast.LENGTH_LONG).show(); } else { Utils.LOGD(" mConnectionResult before trying to connect = " + mConnectionResult); if (mConnectionResult == null) { return; } try { mConnectionResult.startResolutionForResult(LoginActivity.this, REQUEST_CODE_SIGN_IN); } catch (IntentSender.SendIntentException e) { Utils.LOGD( "Exception caught : ) " + e.getMessage()) ; mPlusClient.connect(); } }
onActivityResult:
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_SIGN_IN) { if (resultCode == RESULT_OK && !mPlusClient.isConnected() && !mPlusClient.isConnecting()) { // This time, connect should succeed. mPlusClient.connect(); Utils.LOGD("onActivityResult : mConnectionResult AFTER trying to connect = " + mConnectionResult); Utils.LOGD(" onActivityResult result code = " + resultCode); } } }
问题是在我点击登录按钮和google内置的"loading .."进度条显示后,应用程序突然退出到手机的主屏幕,设备本身没有任何错误显示在logcat中!
此外,当我在应用程序崩溃后回到应用程序时,我看到登录已成功完成,onConnected已被调用,并且我使用我的Google帐户登录.(登录后我有一个editText显示我的名字)
几乎每次我点击按钮时都会发生这种情况,但并非总是如此.香港专业教育学院还注意到,当在模拟器上运行应用程序时,这种崩溃几乎从未发生过(尽管它发生了几次)
我还添加了日志以查看何时调用onConnected onStop和onDestry
这是从我点击登录后到崩溃后不安的logcat:
12-04 17:54:37.464 6516-6516/com.meeba.google D/debug? onClick - View = com.google.android.gms.common.SignInButton@415ea1f8 12-04 17:54:37.464 6516-6516/com.meeba.google D/debug? onClick : mPlusClient status = com.google.android.gms.plus.PlusClient@41570e18 12-04 17:54:37.468 6516-6516/com.meeba.google D/debug? mConnectionResult before trying to connect = ConnectionResult{statusCode=SIGN_IN_REQUIRED, resolution=PendingIntent{4164c2a8: android.os.BinderProxy@41571528}} 12-04 17:54:37.472 195-360/system_process I/ActivityManager? START {cmp=com.google.android.gms/.plus.activity.AccountSignUpActivity (has extras)} from pid -1 12-04 17:54:37.550 6516-6516/com.meeba.google D/debug? onPause 12-04 17:54:37.550 6516-6516/com.meeba.google D/debug? onPause: mPlusClient.isConnected = false 12-04 17:54:37.550 6516-6516/com.meeba.google D/debug? onPause: mPlusClient.isConnecting = false 12-04 17:54:37.589 195-441/system_process I/ActivityManager? START {act=com.google.android.gms.common.account.CHOOSE_ACCOUNT cmp=com.google.android.gms/.common.account.AccountPickerActivity (has extras)} from pid 6544 12-04 17:54:37.789 195-197/system_process D/dalvikvm? GC_CONCURRENT freed 816K, 25% free 13321K/17671K, paused 10ms+11ms 12-04 17:54:37.793 195-227/system_process I/ActivityManager? Displayed com.google.android.gms/.plus.activity.AccountSignUpActivity: +235ms 12-04 17:54:37.937 1199-1210/com.google.android.gsf.login D/dalvikvm? GC_EXPLICIT freed 144K, 7% free 9315K/9927K, paused 1ms+4ms 12-04 17:54:38.187 6544-6546/com.google.android.gms.ui D/dalvikvm? GC_CONCURRENT freed 267K, 4% free 9530K/9927K, paused 2ms+16ms 12-04 17:54:38.211 195-3148/system_process W/InputManagerService? Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@415115c8 12-04 17:54:38.312 631-634/com.google.android.gms D/dalvikvm? GC_CONCURRENT freed 530K, 8% free 10775K/11591K, paused 2ms+15ms 12-04 17:54:38.351 6544-6544/com.google.android.gms.ui D/OpenGLRenderer? Flushing caches (mode 0) 12-04 17:54:38.371 6544-6544/com.google.android.gms.ui D/OpenGLRenderer? Flushing caches (mode 0) 12-04 17:54:38.375 6516-6516/com.meeba.google D/debug? onStop 12-04 17:54:38.375 6516-6516/com.meeba.google D/debug? onDestroy 12-04 17:54:38.418 6516-6516/com.meeba.google D/OpenGLRenderer? Flushing caches (mode 1)
这是返回应用程序后的logcat
12-04 17:59:21.828 195-441/system_process I/ActivityManager? START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.meeba.google/.activities.LoginActivity bnds=[240,405][360,556]} from pid 406 12-04 17:59:21.988 6516-6516/com.meeba.google D/debug? mPlusClient = :com.google.android.gms.plus.PlusClient@416af6d8 12-04 17:59:21.992 6516-6516/com.meeba.google D/debug? onCreate finished 12-04 17:59:21.996 6516-6516/com.meeba.google D/debug? onStart 12-04 17:59:22.003 406-406/com.cyanogenmod.trebuchet D/OpenGLRenderer? Flushing caches (mode 1) 12-04 17:59:22.019 6516-6518/com.meeba.google D/dalvikvm? GC_CONCURRENT freed 406K, 5% free 12419K/12999K, paused 2ms+4ms 12-04 17:59:22.019 6516-6516/com.meeba.google D/debug? onResume 12-04 17:59:22.078 406-406/com.cyanogenmod.trebuchet D/OpenGLRenderer? Flushing caches (mode 0) 12-04 17:59:22.230 195-209/system_process D/dalvikvm? GC_EXPLICIT freed 780K, 25% free 13351K/17671K, paused 3ms+12ms 12-04 17:59:22.355 631-634/com.google.android.gms D/dalvikvm? GC_CONCURRENT freed 524K, 8% free 10777K/11591K, paused 3ms+4ms 12-04 17:59:22.378 195-209/system_process I/Process? Sending signal. PID: 6516 SIG: 3 12-04 17:59:22.378 6516-6520/com.meeba.google I/dalvikvm? threadid=3: reacting to signal 3 12-04 17:59:22.382 6516-6520/com.meeba.google I/dalvikvm? Wrote stack traces to '/data/anr/traces.txt' 12-04 17:59:22.429 195-227/system_process I/ActivityManager? Displayed com.meeba.google/.activities.LoginActivity: +553ms 12-04 17:59:22.640 6544-6544/com.google.android.gms.ui D/OpenGLRenderer? Flushing caches (mode 1) 12-04 17:59:22.660 631-711/com.google.android.gms I/qtaguid? Failed write_ctrl(u 90) res=-1 errno=22 12-04 17:59:22.683 6544-6546/com.google.android.gms.ui D/dalvikvm? GC_CONCURRENT freed 458K, 7% free 9478K/10119K, paused 1ms+3ms 12-04 17:59:22.683 631-711/com.google.android.gms I/qtaguid? Untagging socket 90 failed errno=-22 12-04 17:59:22.683 631-711/com.google.android.gms W/NetworkManagementSocketTagger? untagSocket(90) failed with errno -22 12-04 17:59:22.707 6516-6516/com.meeba.google D/debug? onConnected started 12-04 17:59:22.707 6516-6516/com.meeba.google D/debug? mPlusClient in onConnected is =com.google.android.gms.plus.PlusClient@416af6d8
在调试之后,我看到应用程序在mConnectionResult.startResolutionForResult(LoginActivity.this,REQUEST_CODE_SIGN_IN)行中激动地崩溃了
对错误或我该怎么做的任何想法?提前致谢 :)
编辑:添加了manifest.xml
David Wasser.. 24
android:noHistory="true"
从清单中的
定义中删除LoginActivity
.我非常确定该noHistory
设置会导致Android LoginActivity
在启动Google+登录活动时完成此操作.由于活动已经完成,因此无法调用任何内容onActivityResult()
.你的应用程序实际上并没有崩溃,它刚刚完成.
如果你想确保用户没有回到你的LoginActivity
身边,你将不得不以另一种方式解决这个问题(覆盖onBackPressed()
或其他方式).
android:noHistory="true"
从清单中的<activity>
定义中删除LoginActivity
.我非常确定该noHistory
设置会导致Android LoginActivity
在启动Google+登录活动时完成此操作.由于活动已经完成,因此无法调用任何内容onActivityResult()
.你的应用程序实际上并没有崩溃,它刚刚完成.
如果你想确保用户没有回到你的LoginActivity
身边,你将不得不以另一种方式解决这个问题(覆盖onBackPressed()
或其他方式).