2016-09-26 46 views
1

我有功能,工作正常!但它通過Drive ID?如果Drive id被刪除或破壞,該怎麼辦?如何從App文件夾中讀取文件沒有DriveId的谷歌驅動器?

是他們找到驅動器ID的方法嗎?

我面臨的困難在這樣的場景中

  1. 用戶重新加入我的應用程序或更改設備
  2. 如果我錯過了我的驅動器ID從共享偏好

======= ================================================ 我的working functon

readFromGooDrive(DriveId mDriveId) { 
     byte[] buf = null; 
     if (getGoogleApiClient() != null && getGoogleApiClient().isConnected()) try { 
     DriveFile df = Drive.DriveApi.getFile(getGoogleApiClient(), mDriveId); 
     df.open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null) 
      .setResultCallback(new ResultCallback<DriveContentsResult>() { 
      @Override 
      public void onResult(DriveContentsResult driveContentsResult) { 
      if ((driveContentsResult != null) && driveContentsResult.getStatus().isSuccess()) { 
       DriveContents contents = driveContentsResult.getDriveContents(); 
       BufferedInputStream bis = new BufferedInputStream(contents.getInputStream()); 
       byte[] buffer = new byte[1024]; 
       int bytesread = 0; 
       FileOutputStream outStream; 
       try 
       { 
        String databasePath = getBaseContext().getDatabasePath("my database").getPath(); 
        outStream = new FileOutputStream(databasePath); 
        while((bytesread = bis.read(buffer)) != -1) 
        { 
         outStream.write(buffer,0,bytesread); 
        } 

        outStream.flush(); 
        bis.close(); 
        outStream.close(); 
       } 
       catch (FileNotFoundException e) 
       { 
        Log.i(TAG,e.getMessage()); 
       } 
       catch (IOException e) 
       { 
        Log.i(TAG,e.getMessage()); 
       } 
       finally { 
        Toast.makeText(getBaseContext(),"Data from Google Drive restored successfully." , Toast.LENGTH_LONG).show(); 
       } 
       contents.discard(getGoogleApiClient()); 
      } 
      } 
     }); 
     } catch (Exception e) { e.printStackTrace(); } 
    } 
+0

閱讀此鏈接:https://developers.google.com/drive/android/auth 我認爲沒有必要使用驅動器Id – dipali

+0

你能請舉出一個'DriveId'將被刪除的實例? – Teyam

+0

我正在將一個mydb文件上傳到應用程序文件夾中的驅動器。現在我卸載應用程序,然後再次安裝,並試圖檢索應用程序文件夾的內容,但我沒有得到沒有DriveId? – Harish

回答

0

你只需要複製該文件..其正常使用的兄弟

private static final String TAG = "EditContentsActivity"; 

@Override 
public void onConnected(Bundle connectionHint) { 
    super.onConnected(connectionHint); 

    Query query = new Query.Builder() 
      .addFilter(Filters.contains(SearchableField.TITLE, "New file2.txt")) 
      .build(); 
    Drive.DriveApi.query(getGoogleApiClient(), query) 
      .setResultCallback(metadataCallback); 


} 

public class EditContentsAsyncTask extends ApiClientAsyncTask<DriveFile, Void, Boolean> { 

    public EditContentsAsyncTask(Context context) { 
     super(context); 
    } 

    @Override 
    protected Boolean doInBackgroundConnected(DriveFile... args) { 
     DriveFile file = args[0]; 
     try { 
      DriveContentsResult driveContentsResult = file.open(
        getGoogleApiClient(), DriveFile.MODE_WRITE_ONLY, null).await(); 
      if (!driveContentsResult.getStatus().isSuccess()) { 
       return false; 
      } 
      DriveContents driveContents = driveContentsResult.getDriveContents(); 
      OutputStream outputStream = driveContents.getOutputStream(); 
      outputStream.write("New file2.txt".getBytes()); 
      com.google.android.gms.common.api.Status status = 
        driveContents.commit(getGoogleApiClient(), null).await(); 
      return status.getStatus().isSuccess(); 
     } catch (IOException e) { 
      Log.e(TAG, "IOException while appending to the output stream", e); 
     } 
     return false; 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     if (!result) { 
      showMessage("Error while editing contents"); 
      return; 
     } 
     showMessage("Successfully edited contents"); 
    } 
} 

final private ResultCallback<DriveApi.MetadataBufferResult> metadataCallback = 
     new ResultCallback<DriveApi.MetadataBufferResult>() { 
      @Override 
      public void onResult(DriveApi.MetadataBufferResult result) { 
       if (!result.getStatus().isSuccess()) { 
        showMessage("Problem while retrieving results"); 
        return; 
       } 
       MetadataBuffer mdb = null; 
       try { 
        mdb = result.getMetadataBuffer(); 
        for (Metadata md : mdb) { 
         if (md == null || !md.isDataValid() || md.isTrashed()) continue; 
         // collect files 
         DriveId driveId = md.getDriveId(); 
         String dId = driveId.encodeToString(); 
         Log.i("checking",""+dId); 
         String mime = md.getMimeType(); 
         String name=md.getTitle(); 
         if(name.equals("New file2.txt")){ 
          Log.i("checking2",""+dId); 
          Log.i("checking3",""+driveId.getResourceId()); 
          Drive.DriveApi.fetchDriveId(getGoogleApiClient(), driveId.getResourceId()) 
            .setResultCallback(idCallback); 
          break; 
         } 
         //..... 
        } 
       } finally { if (mdb != null) mdb.close(); } 

      } 
     }; 

final ResultCallback<DriveIdResult> idCallback = new ResultCallback<DriveIdResult>() { 
    @Override 
    public void onResult(DriveIdResult result) { 
     if (!result.getStatus().isSuccess()) { 
      showMessage("Cannot find DriveId. Are you authorized to view this file?"); 
      return; 
     } 
     DriveId driveId = result.getDriveId(); 
     DriveFile file = driveId.asDriveFile(); 
     new EditContentsAsyncTask(EditContentActivity.this).execute(file); 
    } 
}; 
相關問題