Как получить идентификатор файла на диске Google после загрузки файла на диск Google? - PullRequest
0 голосов
/ 23 февраля 2019

Я загружаю файл на диск 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=, это будет работать.

Но этоне работает.

Может кто-нибудь, пожалуйста, помогите.

Спасибо, Ариндам.

...