Java 从其他应用程序打开Gmail应用程序时崩溃
我有一个注册屏幕,一旦用户完成注册,他们就会收到一个通知,检查他们的邮件,并将他们重定向到gmail。然而,gmail崩溃了,它重定向回我的应用程序的登录屏幕。应用重定向是否正确执行Java 从其他应用程序打开Gmail应用程序时崩溃,java,android,android-intent,Java,Android,Android Intent,我有一个注册屏幕,一旦用户完成注册,他们就会收到一个通知,检查他们的邮件,并将他们重定向到gmail。然而,gmail崩溃了,它重定向回我的应用程序的登录屏幕。应用重定向是否正确执行 //method that opens check email alert public void showDialogForRegistrationSuccess(final Activity activity, String msg) { final Dialog dialog = new Dialo
//method that opens check email alert
public void showDialogForRegistrationSuccess(final Activity activity, String msg) {
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(R.layout.custom_dialog_for_exception);
TextView text = (TextView) dialog.findViewById(R.id.text_dialog);
text.setText(Html.fromHtml(msg));
Button dialogButton = (Button) dialog.findViewById(R.id.btn_dialog_ok);
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
sendEmail();
finish();
}
});
dialog.show();
}
/**Method that opens email client*/
public void sendEmail() {
final Intent emailLauncher = new Intent(Intent.ACTION_VIEW);
emailLauncher.setType("message/rfc822");
try {
startActivity(emailLauncher);
finish();
} catch (android.content.ActivityNotFoundException ex) {
System.out.println("not working");
}
}
首先,您要调用两次
finish()。将其从sendmail()方法中删除
其次,由于您不想通过应用程序发送电子邮件,请将您的sendmail()
方法更改为:
public void sendEmail() {
Intent emailLauncher = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_EMAIL);
emailLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(emailLauncher);
}
请在此阅读更多信息。使用此
public void sendEmail(){
Intent mailIntent = new Intent(Intent.ACTION_VIEW);
mailIntent.setClassName("com.google.android.gm","com.google.android.gm.ConversationListActivity");
startActivity(mailClient);
}
这不是一个好主意,因为包名可以更改,而且没有文档记录。如果包名更改,您可以使用try-catch-block,这是非常不可能的。这仍然是一个令人讨厌的黑客行为。如果你的应用程序在play store上发布,并且有一天他们决定更改软件包名称,那么你的用户将不得不等待更新以使应用程序再次工作。这可能会导致大量卸载。正确的方法是使用适当的URI或选择器