Mailto Android:“不支持的操作”错误

Mailto Android:“不支持的操作”错误,android,email,mobile,mailto,Android,Email,Mobile,Mailto,我是新手,但我的代码片段有什么问题? 我在选择链接时收到错误:“此操作当前不受支持”。 这是我的密码: public void addEmail() { TextView txt = (TextView) findViewById(R.id.emailtext); txt.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ Inten

我是新手,但我的代码片段有什么问题? 我在选择链接时收到错误:“此操作当前不受支持”。 这是我的密码:

public void addEmail() {

    TextView txt = (TextView) findViewById(R.id.emailtext);

    txt.setOnClickListener(new View.OnClickListener(){


        public void onClick(View v){
            Intent intent = new Intent();
            String uriText =
                    "mailto:youremail@gmail.com" + 
                    "?subject=" + URLEncoder.encode("some subject text here") + 
                    "&body=" + URLEncoder.encode("some text here");

                Uri uri = Uri.parse(uriText);

                Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
                sendIntent.setData(uri);
                startActivity(Intent.createChooser(sendIntent, "Send email")); 

    }});

}

非常感谢

试试这个,它对我有用:

public void addEmail() {

     TextView txt = (TextView) findViewById(R.id.emailtext);

     txt.setOnClickListener(new View.OnClickListener(){

     public void onClick(View v){

            String[] emails = {"youremail@gmail.com"};
            String subject = "your subject";
            String message = "your message";

            Intent email = new Intent(Intent.ACTION_SEND);
            email.putExtra(Intent.EXTRA_EMAIL, emails);
            email.putExtra(Intent.EXTRA_SUBJECT, subject);
            email.putExtra(Intent.EXTRA_TEXT, message);

            // need this to prompts email client only
            email.setType("message/rfc822");

            startActivity(Intent.createChooser(email, "Choose an Email client :"));
    }});

}

问题可能是你正在一个官方的Android模拟器上运行,而你还没有在上面设置电子邮件帐户。发生这种情况时,模拟器会打开com.android.fallback.fallback活动,但在现实世界的设备上似乎不会发生这种情况

您可以使用以下代码在尝试启动意图之前检测到这一点:

ComponentName emailApp = intent.resolveActivity(getPackageManager());
ComponentName unsupportedAction = ComponentName.unflattenFromString("com.android.fallback/.Fallback");
boolean hasEmailApp = emailApp != null && !emailApp.equals(unsupportedAction);

问题在于您尚未在emulator上设置电子邮件帐户。我在模拟器上也遇到了同样的问题,但在手机上测试时就没有了。

@see@shkschneider,这是如何解决错误的?我在Android 4.0.2模拟器中遇到了这个问题,当时我还没有在Android电子邮件客户端中设置电子邮件帐户。在客户机中设置帐户解决了这个问题。@Sam没有解释如何使用意图正确发送电子邮件吗?下面您确认的答案似乎是同一方向的。这就是我认为我的链接解决了错误的方式。如果没有,那就糟糕了。@shkschneider,它确实解释了如何发送电子邮件,但它并没有真正解决不支持的操作错误的实际原因。问题中的代码实际上工作得很好,但它只是在特定情况下以这种方式中断,从我到目前为止的测试来看,这似乎是一种组合:使用模拟器、使用setData和意图不匹配。这个问题中的代码实际上似乎比setType方法更好,因为根据一些SO答案上的评论,这种方法会导致Skype和其他非电子邮件客户端符合目的。我已经测试并确认了这一点。问题似乎是由于在没有应用程序符合目的的情况下使用setData造成的。此答案只是重申了其他答案和注释中已经说明的内容。