2014-07-19 5 views
8

Ho passato ore e ore a cercare di capire questo google drive Android api, e mi sono frustrato fino al midollo cercando di capire esattamente come usarlo. Sto usando il getting started link sul sito sviluppatori di Google Android, e questo è quello che ho fatto:Errore: GooglePlayServicesUtil: errore interno. Si prega di consultare i registri per informazioni dettagliate. Come posso risolvere questo?

package viva.inspection.com.inspectionpicker; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentSender; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.Spinner; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.drive.Drive; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.drive.Drive; 
import com.google.android.gms.drive.DriveApi.ContentsResult; 
import com.google.android.gms.drive.DriveId; 
import com.google.android.gms.drive.MetadataChangeSet; 
import com.google.android.gms.drive.OpenFileActivityBuilder; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.drive.Drive; 
import com.google.android.gms.drive.DriveApi.ContentsResult; 
import com.google.android.gms.drive.DriveId; 
import com.google.android.gms.drive.MetadataChangeSet; 
import com.google.android.gms.drive.OpenFileActivityBuilder; 

import java.lang.reflect.Array; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.logging.Logger; 

import viva.inspection.com.inspectionpicker.MultiSpinner; 


public class MyActivity extends Activity implements MultiSpinner.MultiSpinnerListener, AdapterView.OnItemSelectedListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 
    GoogleApiClient mGoogleApiClient; 
    final private static int RESOLVE_CONNECTION_REQUEST_CODE = 1; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 
     Button save = (Button) findViewById(R.id.save); 
     //array for the tasks multi-spinner 
     String[] array = getResources().getStringArray(R.array.rooms_array); 
     List<String> rooms = new ArrayList<String>(Arrays.asList(array)); 
     // Create an ArrayAdapter using the string array and a default spinner layout 
     final Spinner roomSpinner = (Spinner) findViewById(R.id.rooms); 
     Spinner itemsSpinner = (Spinner) findViewById(R.id.inspectionItems); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
       R.array.rooms_array, android.R.layout.simple_spinner_item); 
     // Specify the layout to use when the list of choices appears 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     // Apply the adapter to the spinner 
     roomSpinner.setAdapter(
       new NothingSelectedSpinnerAdapter(
         adapter, 
         R.layout.contact_spinner_row_nothing_selected, 
         // R.layout.contact_spinner_nothing_selected_dropdown, // Optional 
         this)); 
     roomSpinner.setOnItemSelectedListener(this); 
     itemsSpinner.setOnItemSelectedListener(this); 
     final MultiSpinner multiSpinner = (MultiSpinner) findViewById(R.id.multi_spinner); 
     multiSpinner.setItems(rooms, "(Choose One)", this); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(Drive.API) 
       .addScope(Drive.SCOPE_FILE) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 
     save.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(MyActivity.this, ListActivity.class); 
       intent.putExtra("NEW_VALUE", roomSpinner.getSelectedItem().toString()); 
       startActivity(intent); 
      } 
     }); 
    } 

    ... 

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

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     if (connectionResult.hasResolution()) { 
      try { 
       connectionResult.startResolutionForResult(this, RESOLVE_CONNECTION_REQUEST_CODE); 
      } catch (IntentSender.SendIntentException e) { 
       // Unable to resolve, message user appropriately 
      } 
     } else { 
      GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), this, 0).show(); 
     } 
    } 

    ... 

    @Override 
    public void onConnected(Bundle bundle) { 
     Drive.DriveApi.newContents(mGoogleApiClient) 
       .setResultCallback(contentsCallback); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
     switch (requestCode) { 
      case RESOLVE_CONNECTION_REQUEST_CODE: 
       if (resultCode == RESULT_OK) { 
        mGoogleApiClient.connect(); 
        DriveId driveId = (DriveId) data.getParcelableExtra(
          OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); 
       } 
       break; 
     } 
    } 

    ResultCallback<ContentsResult> contentsCallback = new 
      ResultCallback<ContentsResult>() { 
       @Override 
       public void onResult(ContentsResult result) { 
        if (!result.getStatus().isSuccess()) { 
         // Handle error 
         return; 
        } 

        MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder() 
          .setMimeType("text/html").build(); 
        IntentSender intentSender = Drive.DriveApi 
          .newCreateFileActivityBuilder() 
          .setInitialMetadata(metadataChangeSet) 
          .setInitialContents(result.getContents()) 
          .build(mGoogleApiClient); 
        try { 
         startIntentSenderForResult(intentSender, 1, null, 0, 0, 0); 
        } catch (IntentSender.SendIntentException e) { 
         // Handle the exception 
        } 
       } 
      }; 
} 

Questo è il mio manifesto, e non ho idea di come il manifesto dovrebbe essere simile:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="viva.inspection.com.inspectionpicker"> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/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=".ListActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".MyActivity" 
      android:label="MyActivity" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="com.google.android.apps.drive.DRIVE_OPEN" /> 
       <data android:mimeType="application/vnd.google-apps.drive-sdk.1234567890" /> 
       <data android:mimeType="image/png" /> 
       <data android:mimeType="image/jpeg" /> 
       <data android:mimeType="image/jpg" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".InitialChoose" 
      android:label="@string/title_activity_initial_choose" 
      android:windowSoftInputMode="stateHidden"> 
     </activity> 
    </application> 

</manifest> 

Quando eseguo l'applicazione, una finestra di dialogo che indica "problema sconosciuto con Google servizi Play", e poi nel registro gatto questo appare:

Error: GooglePlayServicesUtil﹕ Internal error occurred. Please see logs for detailed information. 

Ma non c'è nulla nei log, s o di nuovo sono completamente confuso. Ho esaminato altre domande e ho effettivamente impostato la mia app con la console per sviluppatori, come indicato nelle istruzioni nel link introduttivo sopra.

Ho davvero bisogno di aiuto.

Grazie in anticipo.

+1

Il downgoter spiega? –

risposta

4

Ho risolto il mio problema; sembra che non ho usato l'impronta digitale SHA1 corretta, quindi è per questo che non è stato possibile firmare e autorizzare la mia applicazione.

+1

Ho lo stesso problema, ma il mio SHA1 sembra corretto, preso da Eclipse → Finestra → Preferenze → Android → Build. Ma sto cercando di usare solo l'attività principale (che è stata lanciata) per questo scopo senza i meta tag di Drive in intent-filter. –

+0

Nota: se hai seguito la procedura corretta per l'integrazione con SHA1.Se stai ancora affrontando lo stesso problema. "Errore interno sconosciuto" controlla le tue connessioni Internet. –

1

Nel mio caso un'applicazione eseguita bene, ma un giorno non è riuscito e una finestra di dialogo è apparso con un messaggio: "problema sconosciuto con i servizi di Google Play". Dopo aver reinstallato l'app il problema è scomparso.