要从公共Google Drive文件夹加载图片到ImageView,并实现随机工作,可以按照以下步骤进行操作:
implementation 'com.google.android.gms:play-services-drive:17.0.0'
implementation 'com.google.android.gms:play-services-auth:19.0.0'
implementation 'com.google.android.gms:play-services-base:17.0.0'
implementation 'com.google.android.gms:play-services-identity:19.0.0'
import android.content.Context;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.Task;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class GoogleDriveService {
private static final String APPLICATION_NAME = "Your Application Name";
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
private static final List SCOPES = Collections.singletonList(DriveScopes.DRIVE_READONLY);
private static final String FOLDER_ID = "Your Folder ID";
private final Drive driveService;
public GoogleDriveService(Context context) {
GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(context, SCOPES);
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(context);
if (account != null) {
credential.setSelectedAccount(account.getAccount());
}
HttpTransport httpTransport = AndroidHttp.newCompatibleTransport();
driveService = new Drive.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
}
public List getImageUrls() {
List imageUrls = new ArrayList<>();
try {
FileList result = driveService.files().list()
.setQ("'" + FOLDER_ID + "' in parents")
.setFields("files(webViewLink)")
.execute();
List files = result.getFiles();
if (files != null) {
for (File file : files) {
imageUrls.add(file.getWebViewLink());
}
}
} catch (GoogleJsonResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return imageUrls;
}
}
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
private Button loadButton;
private GoogleDriveService googleDriveService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.image_view);
loadButton = findViewById(R.id.load_button);
googleDriveService = new GoogleDriveService(this);
loadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadImageFromDrive();
}
});
}
private void loadImageFromDrive() {
List imageUrls = googleDriveService.getImageUrls();
if (!imageUrls.isEmpty()) {
String randomImageUrl = getRandomImageUrl(imageUrls);
Picasso.get().load(randomImageUrl).into(imageView);
}
}
private String getRandomImageUrl(List imageUrls) {
Random random = new Random();
int randomIndex = random.nextInt(imageUrls.size());
return imageUrls.get(randomIndex);
}
}