Java 如何将Uri列表中的图像上传到Google Drive?

Java 如何将Uri列表中的图像上传到Google Drive?,java,android,google-drive-api,Java,Android,Google Drive Api,我正在将本地存储的图像显示到recyclerview,现在我想将图像从本地文件夹上载到google drive。我有一个图像的Uri列表。 我有GoogleDrive的登录码,但我不知道如何从android上传图像到GoogleDrive。 有一个按钮,我点击按钮,它将开始上传所有的图像从Uri列表到谷歌驱动器。 请帮助实现这一目标。 多谢各位 家庭片段 如果您想编写可移植代码,请学习如何使用复制文件。通过这种方式,你的代码可以上传到谷歌硬盘,上传到本地连接的U盘或者上传到sd卡 让用户选择一个

我正在将本地存储的图像显示到recyclerview,现在我想将图像从本地文件夹上载到google drive。我有一个图像的Uri列表。 我有GoogleDrive的登录码,但我不知道如何从android上传图像到GoogleDrive。 有一个按钮,我点击按钮,它将开始上传所有的图像从Uri列表到谷歌驱动器。 请帮助实现这一目标。 多谢各位

家庭片段


如果您想编写可移植代码,请学习如何使用复制文件。通过这种方式,你的代码可以上传到谷歌硬盘,上传到本地连接的U盘或者上传到sd卡

让用户选择一个google驱动器目标文件夹 使用activity.getContentresolver openInputStream和openOutputStream复制内容
嘿,谢谢你的回答。但是我是一个初学者,所以如果你能分享这些代码就太好了。对不起,我没有这方面的示例代码。尝试以下教程:
package com.example.infilect.ui.home;

import android.content.ClipData;
import android.content.Intent;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.Adapter;

import com.example.infilect.Adapter.PicAdapters;
import com.example.infilect.Models.Items;
import com.example.infilect.R;
import com.google.android.gms.auth.api.credentials.Credential;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.Scopes;
import com.google.android.gms.common.api.Scope;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static android.content.ContentValues.TAG;

public class HomeFragment extends Fragment {

private HomeViewModel homeViewModel;

RecyclerView recyclerView;
List<Items> itemsList;
PicAdapters picAdapters;
Button syncBtn;


public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
    homeViewModel =
            ViewModelProviders.of(this).get(HomeViewModel.class);
    View root = inflater.inflate(R.layout.fragment_home, container, false);

    itemsList = new ArrayList<>();

    syncBtn = root.findViewById(R.id.syncBtn);

    loadUriData();

    recyclerView = root.findViewById(R.id.home_recycler);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

    PicAdapters picAdapters = new PicAdapters(itemsList,getContext());
    recyclerView.setAdapter(picAdapters);

    syncBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });

    return root;
}

private void loadUriData() {

    File file = new File(Environment.getExternalStorageDirectory()+"/InfilectPics/");

    if(file != null) {

        File listFile[] = file.listFiles();

        for (int i = 0; i < listFile.length; i++) {

            Items items = new Items(Uri.fromFile(listFile[i]), false);
            itemsList.add(items);
        }
    }
}

public  void requestSignIn()
{
    GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestScopes(new Scope(Scopes.PLUS_LOGIN), new Scope(Scopes.PLUS_ME))
            .build();

    GoogleSignInClient googleSignInClient = GoogleSignIn.getClient(getContext(),googleSignInOptions);

    startActivityForResult(googleSignInClient.getSignInIntent(),1000);
}

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == 1000)
    {
        handleSignInIntent(data);
    }
}

private void handleSignInIntent(Intent data) {

    GoogleSignIn.getSignedInAccountFromIntent(data).addOnSuccessListener(new OnSuccessListener<GoogleSignInAccount>() {
        @Override
        public void onSuccess(GoogleSignInAccount googleSignInAccount) {
            GoogleAccountCredential accountCredential = GoogleAccountCredential
                    .usingOAuth2(getContext(), Collections.singleton(Scopes.DRIVE_FILE));

          accountCredential.setSelectedAccount(googleSignInAccount.getAccount());
          Drive googleDriveServices = new Drive.Builder(
                  AndroidHttp.newCompatibleTransport(),
                  new GsonFactory(),
                  accountCredential)
                  .setApplicationName("My Pictures")
                  .build();

        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

        }
    });
}
 apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.example.infilect"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    def camerax_version = '1.0.0-alpha06'
    //noinspection GradleDependency
    implementation "androidx.camera:camera-core:${camerax_version}"
    //noinspection GradleDependency
    implementation "androidx.camera:camera-camera2:${camerax_version}"

    implementation 'com.squareup.picasso:picasso:2.71828'

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.navigation:navigation-fragment:2.2.2'
    implementation 'androidx.navigation:navigation-ui:2.2.2'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

    //goole drive
    implementation('com.google.apis:google-api-services-drive:v3-rev136-1.25.0') {
        exclude group: 'org.apache.httpcomponents'
    }
    implementation 'com.google.android.gms:play-services-auth:18.0.0'
    implementation 'com.google.http-client:google-http-client-gson:1.26.0'

    implementation('com.google.api-client:google-api-client-android:1.26.0') {
        exclude group: 'org.apache.httpcomponents'
    }

    implementation('com.google.apis:google-api-services-drive:v3-rev136-1.25.0') {
        exclude group: 'org.apache.httpcomponents'
    }

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}