Android 意向的OnDestroy()
我正在将googledrive示例转换为我的类,以便更轻松地处理它。Android 意向的OnDestroy(),android,android-intent,google-drive-api,Android,Android Intent,Google Drive Api,我正在将googledrive示例转换为我的类,以便更轻松地处理它。 在本例中,它调用返回意图的方法(该意图用于选择google帐户)。 主活动调用startActivityForResult(意图)。并在onActivityResult上检查会话和登录。 googledrive的例子 public class GoogleActivity extends Activity { static final int REQUEST_ACCOUNT_PICKER = 1; static
在本例中,它调用返回意图的方法(该意图用于选择google帐户)。
主活动调用startActivityForResult(意图)。并在onActivityResult上检查会话和登录。
googledrive的例子
public class GoogleActivity extends Activity {
static final int REQUEST_ACCOUNT_PICKER = 1;
static final int REQUEST_AUTHORIZATION = 2;
static final int CAPTURE_IMAGE = 3;
private static Uri fileUri;
private static Drive service;
private GoogleAccountCredential credential;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);
//Start account picker here (the intent I've told above)
startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
//credential.newChooseAccountIntent() return an intent that can choose google account
}
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
switch (requestCode) {
case REQUEST_ACCOUNT_PICKER:
//Process it when intent exit
if (resultCode == RESULT_OK && data != null && data.getExtras() != null) {
String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
if (accountName != null) {
credential.setSelectedAccountName(accountName);
service = getDriveService(credential);
startCameraIntent();
}
}
break;
case REQUEST_AUTHORIZATION:
if (resultCode == Activity.RESULT_OK) {
saveFileToDrive();
} else {
startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
}
break;
case CAPTURE_IMAGE:
if (resultCode == Activity.RESULT_OK) {
saveFileToDrive();
}
}
}
private void startCameraIntent() {
String mediaStorageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath();
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date());
fileUri = Uri.fromFile(new java.io.File(mediaStorageDir + java.io.File.separator + "IMG_" + timeStamp + ".jpg"));
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(cameraIntent, CAPTURE_IMAGE);
}
private void saveFileToDrive() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
// File's binary content
java.io.File fileContent = new java.io.File(fileUri.getPath());
FileContent mediaContent = new FileContent("image/jpeg", fileContent);
// File's metadata.
File body = new File();
body.setTitle(fileContent.getName());
body.setMimeType("image/jpeg");
File file = service.files().insert(body, mediaContent).execute();
if (file != null) {
showToast("Photo uploaded: " + file.getTitle());
startCameraIntent();
}
} catch (UserRecoverableAuthIOException e) {
startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
} catch (IOException e) {
e.printStackTrace();
}
}
});
t.start();
}
private Drive getDriveService(GoogleAccountCredential credential) {
return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential).build();
}
public void showToast(final String toast) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), toast, Toast.LENGTH_SHORT).show();
}
});
}
}
现在我想创建一个类来处理googledrive的一些功能,包括登录。My Login()方法处理有关登录的所有信息。我可以在主活动之外调用帐户选取者意图,但我无法处理该意图何时退出/销毁。
我的班级是这样的:
public class GoogleHandler {
Activity act;
public GoogleHandler(Activity act) {
this.act = act;
}
public void Login() {
//start
act.startActivity(intent, requestCode);
}
// And then, how to handle when intent exit ??
}
任何建议都对我有帮助。你传递给
startActivity()
的意图永远不会开始或结束。这不是意图所做的;意图启动另一个活动(或服务),然后启动并完成
当Google Account Picker活动完成时,调用活动的onActivityResult()
方法被调用。在您的示例中,act
接收对onActivityResult()的调用。您可以在发布的GoogleDrive示例代码中看到如何正确使用结果的示例
为了正确接收此回调,
act
活动必须覆盖onActivityResult()
。除非将GoogleHandler
更改为活动,否则不能在Login()
方法或GoogleHandler
类中执行此操作。谢谢您的帮助。我可以在GoogleHandler类中重写onActivityResult的“act”吗?不可以。在Java中,必须重写类本身中的方法。谢谢,那么就没有办法创建一个类来处理我想要的google的所有内容了?如果你将GoogleHandler更改为活动,当然可以!或者您可以重新设计这两个类的交互方式。您在何处以及如何处理回拨和帐户逻辑是一个设计决策,这将取决于您的个人喜好。您是对的,我正在将帐户选择器移动到我的活动中,然后它就可以正常工作了。感谢您的帮助我的基本问题:)