6

Tôi đang cố gắng để mã của tôi hoạt động.Android Google Drive SDK - cách hiển thị danh sách tệp trong thư mục đã chọn

Tôi muốn ứng dụng của mình (khi một nút được nhấp) để hiển thị tất cả các thư mục (và tệp) trong thư mục gốc của ổ đĩa. Nhưng có vẻ như điều này là không thể vì mặc dù tôi đã cho phép ứng dụng sử dụng Ouath2, ứng dụng chỉ có quyền truy cập vào các tệp và thư mục mà người dùng chọn.

Hành vi lạ ở chỗ khi bộ chọn thư mục mở ra, nó chỉ liệt kê nội dung của thư mục đó nếu nội dung là thư mục. Nó sẽ không liệt kê bất kỳ tập tin nào cả.

Chuyên gia có thể xem mã của tôi và cho tôi biết tôi đang đi sai ở đâu không?

Tôi đang sử dụng hoạt động PickFolderWithOpener, để lấy driveId. Nó trả về một driveID dựa trên lựa chọn người dùng từ bộ chọn.

DriveId driveId = (DriveId) data.getParcelableExtra(
          OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); 

Đó có phải là những gì được trả về ở đây, thư mục Drive ID? Sau đó tôi cần gọi ý định ListFilesInFolderActivity. Tôi giả sử tôi phải vượt qua driveID này trong cuộc gọi ý định? Nếu tôi định dạng DriveID dưới dạng chuỗi và vượt qua nó, nó không thành công với "Không thể tìm thấy DriveId. Bạn có được phép xem tệp này không?" thông điệp.

Vì vậy, những gì tôi đang làm là chuyển ResourceID.

Intent intent = new Intent(this, ListFilesInFolderActivity.class); 
        intent.putExtra("DriveID", driveId.getResourceId()); 
        startActivity(intent); 

Điều gì cần được sử dụng trong ListFilesInFolderActivity? DriveID hoặc resourceID? Đây là những gì tôi có trong ListFilesInFolderActivity?

Bundle extras = getIntent().getExtras(); 
     folderId= extras.getString("DriveID"); // this is the resourceID 
Drive.DriveApi.fetchDriveId(getGoogleApiClient(), folderId) 
       .setResultCallback(idCallback); 


final private 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; 
    } 
    DriveFolder folder = Drive.DriveApi.getFolder(getGoogleApiClient(), result.getDriveId()); 
    showMessage("Result driveId is: " + result.getDriveId()); 
    folder.listChildren(getGoogleApiClient()) 
      .setResultCallback(metadataResult); 



} 
}; 

Mà dường như để làm việc, nhưng nó chỉ liệt kê các thư mục trong thư mục đã chọn. Nó không liệt kê các tập tin. Tại sao folder.listChildren(getGoogleApiClient()) cũng không liệt kê các tệp?

Hy vọng đây là điều hiển nhiên tôi đang thiếu.

+0

Phạm vi Drive trong ứng dụng của bạn là gì? – Sunny

+0

mGoogleApiClient = new GoogleApiClient.Builder (this) .addApi (Drive.API) .addScope (Drive.SCOPE_FILE) .addConnectionCallbacks (this) .addOnConnectionFailedListener (this) .build(); – user3437721

+1

Đây có phải là lý do ?? "Lưu ý: API Android của Google Drive hiện chỉ hỗ trợ phạm vi cấp phép drive.file và drive.appdata. Nếu ứng dụng của bạn yêu cầu quyền hoặc tính năng bổ sung chưa có trong API Android của Drive, bạn phải sử dụng Java API của Google API." – user3437721

Trả lời

9

Bạn không thể làm điều này với SDK mới vì nó chỉ cho phép truy cập SCOPE_FILE.

Đây có phải là lý do không ?? "Lưu ý: API Android của Google Drive hiện chỉ hỗ trợ phạm vi cấp phép drive.file và drive.appdata. Nếu ứng dụng của bạn yêu cầu quyền hoặc tính năng bổ sung chưa có trong API Android của Drive, bạn phải sử dụng Java API của Google API."

+0

Cảm ơn chi tiết này "Lưu ý : API Android của Google Drive hiện chỉ hỗ trợ phạm vi cấp phép drive.file và drive.appdata. Nếu ứng dụng của bạn yêu cầu quyền hoặc tính năng bổ sung chưa có trong API Android của Drive, bạn phải sử dụng Java API của Google API. " ! Đó là một điểm thực sự quan trọng! –

Các vấn đề liên quan