2013-04-23 5 views
4

Я пытаюсь запустить диск SDk андроид образец DrEdit, но я получаю исключение:Не удалось получить Токен DrEdit андроид образец

04-23 16:49:19.642: E/DriveSyncAdapter(11914): Failed to get token 
04-23 16:49:19.642: W/System.err(11914): com.google.android.gms.auth.UserRecoverableAuthException: NeedPermission 
04-23 16:49:19.642: W/System.err(11914): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
04-23 16:49:19.642: W/System.err(11914): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
04-23 16:49:19.642: W/System.err(11914): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:192) 
04-23 16:49:19.642: W/System.err(11914): at com.example.android.notepad.DriveSyncer.getDriveService(DriveSyncer.java:381) 
04-23 16:49:19.642: W/System.err(11914): at com.example.android.notepad.DriveSyncer.<init>(DriveSyncer.java:94) 
04-23 16:49:19.642: W/System.err(11914): at com.example.android.notepad.DriveSyncAdapter.onPerformSync(DriveSyncAdapter.java:32) 
04-23 16:49:19.642: W/System.err(11914): at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:254) 

На:

credential.getToken(); 

В DriveSyncer. getDriveService().

Я уже изменил мой Id в манифесте, и установите присвоенные разрешения:

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
    <uses-permission android:name="android.permission.READ_SYNC_STATS" /> 
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> 
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> 
    ... 
    <meta-data 
     android:name="com.google.android.apps.drive.APP_ID" 
     android:value="id=XXXXXXXX.apps.googleusercontent.com" /> 

А также включен приводную API и набор учетных данных.

На моем Android-устройстве он запрашивает у меня учетную запись, но никогда не запрашивает другую авторизацию, она показывает уведомление, но это все. Однако образец быстрого запуска работает отлично.

код, где я получаю ошибку является:

 private Drive getDriveService() { 
     if (mService == null) { 
      try { 
      GoogleAccountCredential credential = 
       GoogleAccountCredential.usingOAuth2(mContext, DriveScopes.DRIVE_FILE); 
      credential.setSelectedAccountName(mAccount.name); 
      // Trying to get a token right away to see if we are authorized 
      credential.getToken(); 
      Log.e("MyTag", "Never Called"); 
      mService = new Drive.Builder(AndroidHttp.newCompatibleTransport(), 
        new GsonFactory(), credential).build(); 
       } catch (Exception e) { 
        Log.e(TAG, "Failed to get token"); 
        // If the Exception is User Recoverable, we display a notification that will trigger the 
        // intent to fix the issue. 
        if (e instanceof UserRecoverableAuthException) { 
         UserRecoverableAuthException exception = (UserRecoverableAuthException) e; 
(NotificationManager) mContext 
          .getSystemService(Context.NOTIFICATION_SERVICE); 
         Intent authorizationIntent = exception.getIntent(); 
         authorizationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).addFlags(
          Intent.FLAG_FROM_BACKGROUND); 
         PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, 
          authorizationIntent, 0); 
         Notification notification = new Notification.Builder(mContext) 
          .setSmallIcon(android.R.drawable.ic_dialog_alert) 
          .setTicker("Permission requested") 
          .setContentTitle("Permission requested") 
          .setContentText("for account " + mAccount.name) 
          .setContentIntent(pendingIntent).setAutoCancel(true).build(); 
         notificationManager.notify(0, notification); 
        } else { 
         e.printStackTrace(); 
        } 
       } 
     } 
     return mService; 
     } 

Любые идеи, было бы здорово. Благодарю.

+0

У меня такая же проблема с телефоном HTC (Android 4.0.3), хотя она отлично работает на моем Nexus 4. Скорее всего, проблемы с Android SDK. –

+0

Возможно, это связано с тем, что другие образцы сервисов для дисков или сервисов Google работают нормально. – nowxue

ответ

2

У меня такая же проблема, даже я запускаю только оригинальный DrEdit. Запрос разрешения отображается на панели уведомлений, но после нажатия на него ответа нет.

PS. Я использовал HTC 4.0.1 и телефон Google, чтобы попробовать эту проблему, но никто не работает.

В любом случае, эта статья решила мою проблему, вы можете попробовать это. https://stackoverflow.com/a/16535080/1645840

Единственная разница, которую я назвал этой функцией, и она по-прежнему работает.

GoogleAuthUtil.getTokenWithNotification(mContext, 
        mAccount.name, "oauth2:" + DriveScopes.DRIVE_FILE, 
        null);//, mAuthority, mSyncBundle); 
Смежные вопросы