Я загружаю файл на диск Google с помощью API Android, но не могу получить точный или работающий идентификатор диска.Невозможно открыть идентификатор диска, который я получаю.
private Task<Void> createFileIntentSender(DriveContents driveContents, File file, String mimetype) {
//Log.i(TAG, "New contents created.");
// Get an output stream for the contents.
try {
ParcelFileDescriptor pfd = driveContents.getParcelFileDescriptor();
long bytesToSkip = pfd.getStatSize();
InputStream in = new FileInputStream(pfd.getFileDescriptor());
while (bytesToSkip > 0) {
long skipped = in.skip(bytesToSkip);
bytesToSkip -= skipped;
}
OutputStream oos = new FileOutputStream(pfd.getFileDescriptor());
if (oos != null)
try
{
Log.d("Testing", "input stream::: "+(inputStream==null));
byte[] buf = new byte[8192];
int c;
while ((c = inputStream.read(buf, 0, buf.length)) > 0) {
oos.write(buf, 0, c);
oos.flush();
}
}
finally
{
oos.close();
}
}
catch (Exception ignore) {
Log.d("Testing", "exception:: "+ignore.getMessage());
}
// Create the initial metadata - MIME type and title.
// Note that the user will be able to change the title later.
MetadataChangeSet metadataChangeSet =
new MetadataChangeSet.Builder()
.setMimeType(mimetype)
.setTitle(filename)
.build();
//filename = "sample"+mimetype;
// Set up options to configure and display the create file activity.
CreateFileActivityOptions createFileActivityOptions =
new CreateFileActivityOptions.Builder()
.setInitialMetadata(metadataChangeSet)
.setInitialDriveContents(driveContents)
.build();
return mDriveClient
.newCreateFileActivityIntentSender(createFileActivityOptions)
.continueWith(
new Continuation<IntentSender, Void>() {
@Override
public Void then(@NonNull Task<IntentSender> task) throws Exception {
Log.d("Testing", "inside then::: ");
startIntentSenderForResult(task.getResult(), REQUEST_CODE_CREATOR, null, 0, 0, 0, Bundle.EMPTY);
return null;
}
});
}
Теперь, после успешной загрузки, он загружается на диск и указатель на OnActivityResult ().
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_CREATOR && resultCode == RESULT_OK ) {
driveId =
data.getParcelableExtra(OpenFileActivityOptions.EXTRA_RESPONSE_DRIVE_ID);
DriveFile file = driveId.asDriveFile();
Log.d("Testing", "Original driveid: " + file.getDriveId());
Log.d("Testing", "encoded driveid: " + driveId.encodeToString());
Log.d("Testing", "decoded driveid: " + decodeFromString(driveId.encodeToString()));
String s = driveId.encodeToString();
String s1 = s.substring(s.indexOf(":")+1);
s1.trim();
mStrDeviceID.add(s1);
mTvAttchment.setVisibility(View.VISIBLE);
mTvAttchment.setText(mTvAttchment.getText()+"\n"+filename);
Log.d("Testing", "File created with ID: " + driveId.encodeToString()+" "+filename);
//showMessage(getString(R.string.file_created, "File created with ID: " + driveId));
}
}
Здесь идентификатор диска, который я получаю, выглядит следующим образом: DriveId: CAESABieXXD2t5T8jFooAA ==.Используя этот идентификатор диска, я не могу открыть URL-адрес.
Как правило, если мы добавим идентификатор файла диска по следующей ссылке: https://drive.google.com/uc?id=, это будет работать.
Но этоне работает.
Может кто-нибудь, пожалуйста, помогите.
Спасибо, Ариндам.