我从本地存储显示图像到recyclerview,现在我想从本地文件夹上传图像到google drive.我有一个图像的Uri.I有登录代码的google drive,但我不知道如何从android上传图像到google drive.有。我有一个列表的Uri的图像.我有登录代码的谷歌驱动器,但我不知道如何上传图像从Android到谷歌驱动器.有一个按钮,我点击按钮,它将开始上传所有的图像从列表的Uri到谷歌驱动器。请帮助实现这一点.谢谢你。
首页碎片
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) {
}
});
}
}
build.gradle
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'
}
如果你想写可移植的代码,学习如何复制文件,使用 文档文件 代替。这样你的代码就可以用 "上传到google drive","上传到本地连接的usb-stick "或者 "上传到sd-card"。