다음 프로그램은 Google 드라이브에서 '나와 공유 한 파일'을 표시합니다. listView에있는 모든 파일을 표시하고 있습니다. 여기에서 사용자가 목록 항목을 클릭 할 때마다 Google 드라이브 파일을 다운로드하고 파일의 드라이브 ID를 얻기 위해 코드를 작성했습니다.android api를 사용하여 Google 드라이브 파일을 다운로드하는 방법
다음 코드에서 수행 한 작업입니다.
Google 드라이브 android API를 사용하여 사용자가 목록 항목을 클릭 할 때마다 Google 드라이브에서 파일을 다운로드하도록 도와주세요.
가) 대해서 getFile를 호출하여 DriveFile 객체를 생성 :
public class MainActivity extends BaseDemoActivity{
private static final String TAG = "MainActivity";
private ListView mResultsListView;
private ResultsAdapter mResultsAdapter;
private ProgressBar mProgressBar;
private DriveId mSelectedFileDriveId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mResultsListView = (ListView) findViewById(R.id.listViewSamples);
mResultsAdapter = new ResultsAdapter(this);
mResultsListView.setAdapter(mResultsAdapter);
mResultsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (mSelectedFileDriveId != null) {
open();
return;
}
}
});
}
private void open() {
showMessage("Select files drive id = "+mSelectedFileDriveId);
// Reset progress dialog back to zero as we're
// initiating an opening request.
// mProgressBar.setProgress(0);
DownloadProgressListener listener = new DownloadProgressListener() {
@Override
public void onProgress(long bytesDownloaded, long bytesExpected) {
// Update progress dialog with the latest progress.
int progress = (int)(bytesDownloaded*100/bytesExpected);
Log.d(TAG, String.format("Loading progress: %d percent", progress));
mProgressBar.setProgress(progress);
}
};
Drive.DriveApi.getFile(getGoogleApiClient(), mSelectedFileDriveId)
.open(getGoogleApiClient(), DriveFile.MODE_READ_WRITE, listener)
.setResultCallback(driveContentsCallback);
mSelectedFileDriveId = null;
}
private ResultCallback<DriveContentsResult> driveContentsCallback =
new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult result) {
if (!result.getStatus().isSuccess()) {
showMessage("Error while opening the file contents");
return;
}
showMessage("File contents opened");
}
};
/**
* Clears the result buffer to avoid memory leaks as soon as the activity is no longer
* visible by the user.
*/
@Override
protected void onStop() {
super.onStop();
mResultsAdapter.clear();
}
@Override
public void onConnected(Bundle connectionHint) {
super.onConnected(connectionHint);
Drive.DriveApi.requestSync(getGoogleApiClient())
.setResultCallback(statusCallback);
showMessage("Connecting ...");
}
final private ResultCallback<Status> statusCallback =
new ResultCallback<Status>() {
@Override
public void onResult(Status arg0) {
// TODO Auto-generated method stub
showMessage("Fetching...");
if(arg0.getStatus().isSuccess()){
Query query = new Query.Builder()
.addFilter(Filters.sharedWithMe())
.build();
Drive.DriveApi.query(getGoogleApiClient(), query)
.setResultCallback(metadataCallback);
}else{
showMessage("Error = "+arg0);
}
}
};
final private ResultCallback<DriveApi.MetadataBufferResult> metadataCallback =
new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult result) {
// TODO Auto-generated method stub
showMessage("onResult ...");
if (!result.getStatus().isSuccess()) {
showMessage("Problem while retrieving results");
return;
}
mResultsAdapter.clear();
mResultsAdapter.append(result.getMetadataBuffer());
MetadataBuffer buffer = result.getMetadataBuffer();
Metadata meta = buffer.get(0);
Log.v(TAG,"WEB CONTENT LINK = "+meta.getWebContentLink());
mSelectedFileDriveId = (DriveId) meta.getDriveId();
showMessage("Count = "+mResultsAdapter.getCount());
}
};
}
https://developers.google.com/drive/android/files 당신에게 리베로 감사드립니다. Google 드라이브 서비스를 사용하려면 Gmail 계정을 통해 로그인해야합니다. WebContentLink를 브라우저에 전달하면 인증을 요청해야하지만 이미 응용 프로그램에서 내 계정을 인증했습니다. 내 응용 프로그램에서 브라우저에 인증을 설정할 수있는 방법이 있습니까? – Manoj