【问题标题】:android mailto code not functioning properlyandroid mailto代码无法正常运行
【发布时间】:2011-12-16 06:58:24
【问题描述】:
package com.helloworld;

import android.app.Activity;
import android.os.Bundle; 
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.view.KeyEvent;
import android.content.Intent;
import android.net.MailTo;
import android.content.Context;


public class HelloWorld extends Activity
{
    final Activity activity = this;


    WebView webview;
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (webview != null && (keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
        webview.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
    }

    @Override
   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);


        webview = (WebView) findViewById(R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setBuiltInZoomControls(true);
        webview.getSettings().setUseWideViewPort(true);
        webview.loadUrl("http://www.blahblah.org");

        webview.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress)
            {
                activity.setTitle("Loading...");
                activity.setProgress(progress * 100);

                if(progress == 100)
                    activity.setTitle(R.string.app_name);
            }
        });

        webview.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode, String       description, String failingUrl)
            {
            // Handle the error
            }

     @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
            if(url.startsWith("mailto:")){
                MailTo mt = MailTo.parse(url);
                Intent i = newEmailIntent(activity.this, mt.getTo(), mt.getSubject(), mt.getBody(), mt.getCc());
                startActivity(i);
                view.reload();
                return true;
            }

             view.loadUrl(url);
            return true;
        }

    });
}
    public static Intent newEmailIntent(Context context, String address, String subject, String body, String cc) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_EMAIL, new String[] { address });
        intent.putExtra(Intent.EXTRA_TEXT, body);
        intent.putExtra(Intent.EXTRA_SUBJECT, subject);
        intent.putExtra(Intent.EXTRA_CC, cc);
        intent.setType("message/rfc822");
        return intent;
    }
}

上面的代码可以正常运行,除非单击 mailto 链接时,设备信使打开并且不会将 mailto“正文”放在信使的撰写部分。相同的 mailto 链接在设备 Web 浏览器中正常工作。任何想法,将不胜感激。谢谢!

【问题讨论】:

    标签: android mailto


    【解决方案1】:

    我在测试中遇到了类似的问题, 但事实证明,使用text/plain 类型, 它正在尝试发送短信。

    我认为你想改变两件事。

    intent.setType("text/html");
    

    但你也应该使用Intent.createChooser

    startActivity(Intent.createChooser(intent, "Some prompt for the user:"));
    

    尤其是电子邮件,他们可能同时安装了 android 电子邮件应用和 gmail 应用。 或者他们可能没有安装能够发送 html 电子邮件的应用程序。

    这解决了我在模拟器上的一个问题,它一直在中断。

    这是我的工作电子邮件发件人的完整代码。

    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    
    emailIntent.setType("text/html");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, EMAIL_TO);
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, EMAIL_SUBJECT);
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, EMAIL_TEXT);
    
    startActivity(Intent.createChooser(emailIntent, "Send Email to the Author:"));
    

    更新:

    再次阅读问题 您可能应该添加一些调试,确保它不是错误的 mailto 解析。

    String tag = "emaildebug";
    Log.d(tag, "address: "+address);
    Log.d(tag, "body:    "+body);
    Log.d(tag, "subject: "+subject);
    Log.d(tag, "cc:      "+cc);
    

    【讨论】:

    • 我不确定如何在上面的代码中实现您的代码。我做的一件事是先用 mt.getBody 更改 newEmailIntent 行中的顺序。当我运行应用程序时,mailto 链接的正文被放置在信使的撰写部分,但链接被切断。看起来 mailto 代码无法识别“http”地址和“?”在链接中。
    • 我认为您的问题措辞有误。你的问题,我猜实际上与你的 mailto 看起来像 mailto:me@example.com?body=some+link+to+http://example.com?query=something 的事实有关。这肯定行不通。您需要转义网址。类似http%3A%2F%2Fexample.com%3Fquery%3Dsomething
    • 我更改了 :, ?和 / 使用正确的 url 编码。单击 webview 中的链接时,正文和主题仍未在信使中预填充。完全相同的链接在其他浏览器中也能完美运行。
    【解决方案2】:

    仍然没有修复此问题的错误: http://code.google.com/p/android/issues/detail?id=22684

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-07
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      相关资源
      最近更新 更多