对Java,Android Dev和Android Studio完全陌生 - 我有点挣扎。
我想创建一个应用程序,我可以在Google云端硬盘中选择一个文件夹。查看该文件夹中的照片并选择我想要的照片(多选)。
然后,我想要获取这些照片的云端元数据 - 例如照片的链接,并能够循环浏览每张照片并执行其他活动(例如,在电子邮件中发送这些照片)。
以下是示例演示:
我使用PickFolderWithOpenerActivity作为第一个活动,它允许我选择一个文件夹(文件夹内容虽然是灰色的)。
当我选择一个文件夹时,它会填充文件夹driveId(来自样本):
showMessage("Selected folder's ID: " + driveId);
接下来 - 我假设我需要调用另一个Activity,例如ListFilesInFolderActivity.java。
我认为需要使用intent调用此活动。
问题:
在BaseActivity.java中 - 有一个静态字符串:
public static final String EXISTING_FOLDER_ID = "0B2EEtIjPUdX6MERsWlYxN3J6RU0";
所以在PickFolderActvity中,我尝试使用以下内容覆盖它:
showMessage("Selected folder's ID: " + driveId);
EXISTING_FOLDER_ID = driveId.toString();
Intent intent = new Intent(this, ListFilesActivity.class);
startActivity(intent);
但应用程序崩溃了。 请注意,我似乎无法使用模拟器,这与Google Play服务有关。我不得不生成一个apk并转移到我的设备。
感谢您的帮助,感谢初学者的耐心等待。
这是来自PickFolderWithOpenerActivity的代码,[编辑]我修改了代码,现在它可以工作,并调用ListFilesInFolder.java。但这些文件未列在ListView中。我不确定为什么。:
public class PickFolderWithOpenerActivity extends BaseActivity {
private static final String TAG = "PickFolderWithOpenerActivity";
private static final int REQUEST_CODE_OPENER = 1;
@Override
public void onConnected(Bundle connectionHint) {
super.onConnected(connectionHint);
IntentSender intentSender = Drive.DriveApi
.newOpenFileActivityBuilder()
.setMimeType(new String[] { DriveFolder.MIME_TYPE })
.build(getGoogleApiClient());
try {
startIntentSenderForResult(
intentSender, REQUEST_CODE_OPENER, null, 0, 0, 0);
} catch (SendIntentException e) {
Log.w(TAG, "Unable to send intent", e);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case REQUEST_CODE_OPENER:
if (resultCode == RESULT_OK) {
DriveId driveId = (DriveId) data.getParcelableExtra(
OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);
showMessage("Selected folder's ID: " + driveId);
EXISTING_FOLDER_ID = driveId.getResourceId();
Intent intent = new Intent(this, ListFilesInFolderActivity.class);
startActivity(intent);
}
finish();
break;
default:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}
}
答案 0 :(得分:2)
似乎当我将driveID传递给ListFilesInFolder.java时,它是不正确的。
我应该传递resourceID。
以下是PickFolderWithOpenerActivity.java中的更正代码:
EXISTING_FOLDER_ID = driveId.getResourceId();
Intent intent = new Intent(this, ListFilesInFolderActivity.class);
startActivity(intent);
这现在有效,代码调用ListFilesInFolderActivity。但它没有列出ListView中的文件。我会为此打开一个单独的问题!