2011-10-27 129 views
3
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「body」放置在信使的撰寫部分中。相同的mailto鏈接在設備Web瀏覽器中正常工作。任何想法,將不勝感激。謝謝!android mailto代碼無法正常運行

回答

0

我在測試中遇到類似問題, 但事實證明,使用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:")); 

更新:

再次閱讀問題 很可能需要添加一些調試,確保其不郵寄地址解析這是錯誤的。

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

我不是肯定究竟如何實現你的代碼在上面的代碼。我做的一件事就是先用mt.getBody改變newEmailIntent行的順序。當我運行應用程序時,mailto鏈接的主體被放置在信使的合成部分,但鏈接被切斷。它看起來像mailto代碼不能識別「http」地址和「?」在鏈接中。 – zef99

+0

我認爲你的問題措詞錯誤。你是問題,我猜實際上是因爲你的mailto看起來像'mailto:[email protected]?body = some + link + to + http://example.com?query = something '。這當然是行不通的。您需要轉義該網址。類似'http%3A%2F%2Fexample.com%3Fquery%3Dsomething' –

+0

我改變了:,?和/使用正確的網址編碼。單擊webview中的鏈接時,身體和主體仍然未在Messenger中預填。完全相同的鏈接在其他瀏覽器中完美。 – zef99