Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从其他应用程序打开Gmail应用程序时崩溃_Java_Android_Android Intent - Fatal编程技术网

Java 从其他应用程序打开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

我有一个注册屏幕,一旦用户完成注册,他们就会收到一个通知,检查他们的邮件,并将他们重定向到gmail。然而,gmail崩溃了,它重定向回我的应用程序的登录屏幕。应用重定向是否正确执行

//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或选择器