2013-05-12 12 views
8

Sto utilizzando com.actionbarsherlock.app.SherlockActivity nel mio progetto. Quando provo ad avviare un'altra attività in cui dovrò eseguire un accesso Google+, si verifica questo errore. Sto ottenendo questo errore su un dispositivo reale, non sull'emulatore. Cosa pensi che stia sbagliando?Google + Accedi: l'attività non verrà avviata

errore

05-12 15:58:12.487: E/AndroidRuntime(24310): FATAL EXCEPTION: main 
05-12 15:58:12.487: E/AndroidRuntime(24310): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.android.gms/com.google.android.gms.plus.activity.AccountSignUpActivity}: java.lang.SecurityException: Must be started via startActivityForResult 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.os.Looper.loop(Looper.java:137) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at java.lang.reflect.Method.invokeNative(Native Method) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at java.lang.reflect.Method.invoke(Method.java:511) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at dalvik.system.NativeStart.main(Native Method) 
05-12 15:58:12.487: E/AndroidRuntime(24310): Caused by: java.lang.SecurityException: Must be started via startActivityForResult 
05-12 15:58:12.487: E/AndroidRuntime(24310): at com.google.android.gms.plus.activity.AccountSignUpActivity.onCreate(AccountSignUpActivity.java:119) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.app.Activity.performCreate(Activity.java:5104) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
05-12 15:58:12.487: E/AndroidRuntime(24310): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
05-12 15:58:12.487: E/AndroidRuntime(24310): ... 11 more 

LandingActivity.java

public class LandingActivity extends SherlockActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Intent i = new Intent(getApplicationContext(), SignInActivity.class); 
    this.startActivityForResult(i, 1); 
} 
} 

SignInActivity.java

import com.actionbarsherlock.app.SherlockActivity; 
import android.view.View; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.content.IntentSender.SendIntentException; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 
//import com.google.android.gms.common.*; 
//import com.google.android.gms.common.GooglePlayServicesClient.*; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks; 
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener; 
import com.google.android.gms.plus.PlusClient; 


/** 
* Example of signing in a user with Google+, and how to make a call to a Google+ API endpoint. 
*/ 
public class SignInActivity extends SherlockActivity 
implements View.OnClickListener, ConnectionCallbacks, OnConnectionFailedListener 
{ 
    private static final String TAG = "ExampleActivity"; 
    private static final int REQUEST_CODE_RESOLVE_ERR = 9000; 

    private ProgressDialog mConnectionProgressDialog; 
    private PlusClient mPlusClient; 
    private ConnectionResult mConnectionResult; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sign_in_activity); 
     findViewById(R.id.sign_in_button_dude).setOnClickListener(this); 

     mPlusClient = new PlusClient.Builder(this, this, this).build(); 
     //.setVisibleActivities("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity") 
     // Progress bar to be displayed if the connection failure is not resolved. 
     mConnectionProgressDialog = new ProgressDialog(this); 
     mConnectionProgressDialog.setMessage("Signing in..."); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     mPlusClient.connect(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     mPlusClient.disconnect(); 
    } 

    public void onConnectionFailed(ConnectionResult result) { 
     if (result.hasResolution()) { 
      try { 
       result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR); 
      } catch (SendIntentException e) { 
       mPlusClient.connect(); 
      } 
     } 
     // Save the result and resolve the connection failure upon a user click. 
     mConnectionResult = result; 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int responseCode, Intent intent) { 
     if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) { 
      mConnectionResult = null; 
      mPlusClient.connect(); 
     } 
    } 

    public void onConnected() { 
     String accountName = mPlusClient.getAccountName(); 
     //mConnectionProgressDialog.dismiss(); //https://developers.google.com/+/mobile/android/sign-in 
     Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG).show(); 
     //Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show(); 
    } 

    public void onDisconnected() { 
     Log.d(TAG, "disconnected"); 
    } 

    public void onClick(View view) { 
     if (view.getId() == R.id.sign_in_button_dude && !mPlusClient.isConnected()) { 
      if (mConnectionResult == null) { 
       mConnectionProgressDialog.show(); 
      } else { 
       try { 
        mConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR); 
       } catch (SendIntentException e) { 
        // Try connecting again. 
        mConnectionResult = null; 
        mPlusClient.connect(); 
       } 
      } 
     } 
    } 
} 

I ho anche provato a utilizzare "setScopes (Scopes.PLUS_LOGIN)" ma ho riscontrato lo stesso problema.

import com.google.android.gms.common.Scopes; 
// in onCreate() 
mPlusClient = new PlusClient.Builder(this, this, this).setScopes(Scopes.PLUS_LOGIN).build(); 

ho cercato di iniziare keytool così .... è necessario androiddebugkey? https://developers.google.com/+/mobile/android/getting-started

C:\repos>c:\java\jdk1.6.0_34\bin\keytool.exe -exportcert -alias androiddebugkey -keystore agoyal-release-key.keystore -list -v 
Enter keystore password: 
keytool error: java.lang.Exception: Alias <androiddebugkey> does not exist 
    java.lang.Exception: Alias <androiddebugkey> does not exist 
    at sun.security.tools.KeyTool.doPrintEntry(KeyTool.java:1339) 
    at sun.security.tools.KeyTool.doCommands(KeyTool.java:869) 
    at sun.security.tools.KeyTool.run(KeyTool.java:172) 
    at sun.security.tools.KeyTool.main(KeyTool.java:166) 
+1

** "Che cosa sto facendo male?" ** Beh, la prima cosa che stai sbagliando è che non ci stai mostrando tutto il tuo codice. Il problema è con "com.google.android.gms.plus.activity.AccountSignUpActivity". Supponendo che tu stia provando ad avviarlo dal tuo 'SignInActivity' non è di aiuto che tu abbia mostrato solo'/* code */'per quello. – Squonk

+0

Squonk: Ho condiviso tutto il codice in SignInActivity.java – AG1

+0

Dal logcat, sono d'accordo con @Squonk, manca del codice! – thiagolr

risposta

1

per il comando keytool, se si utilizza la chiave di sblocco propria, l'alias dovrebbe essere quella la chiave utilizzata, non "androiddebugkey".

+0

grazie per questo - non so perché Google non chiarisce che nei loro documenti ... – bkurzius

0

Qualcosa non è giusto, sei sicuro che era l'output logcat corretto?

Con il tuo codice, dovresti ottenere l'eccezione android.app.SuperNotCalledException: Activity {LandingActivity} did not call through to super.onCreate() invece dell'errore che stai visualizzando.

Inoltre, il metodo public onConnected() nello SignInActivity ha una firma non corretta. Quello corretto dovrebbe essere public onConnected(Bundle connectionHint). È probabile che la tua app non sia compilata correttamente.

Problemi correlati