2013-12-14 83 views
5

我有這個工作,因爲它應該使用下面的代碼。所有http url都應該在webview中打開,「tel:」鏈接將以撥號程序的形式打開,並且「mailto:」鏈接會在電子郵件客戶端中打開。Webview「mailto:」鏈接&「tel:」鏈接工作使用Intent.ACTION_VIEW,但我如何添加唯一的主題,即「mailto:」鏈接

但我的問題是如何將「mailto:」鏈接的主題更改爲不同於其預定義主題的主題。我猜應該有2個單獨的意圖,1爲「電話:」鏈接& 1爲「mailto:」鏈接。我只是不知道如何將代碼放入下面的shouldOverrideUrlLoading方法中。或者,也許我正在使用我需要的方法。

 @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if(url.startsWith("http:") || url.startsWith("https:")) { 
       return false; 
      } 

      // Otherwise allow the OS to handle it 
      Intent intent = new Intent(Intent.ACTION_VIEW, 
        Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 

我設法讓我自己的主題「mailto:」與Intent一起工作,但沒有包含在代碼中的「tel:」鏈接。那麼我怎麼能在「mailto:」鏈接中使用我自己的主題呢?

任何意見或建議將不勝感激!

回答

8

這是我的解決方案&它爲我工作。我希望它能幫助有我遇到同樣問題的任何人。

@Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if(url.startsWith("http:") || url.startsWith("https:")) { 
       return false; 
      } 

      // Otherwise allow the OS to handle it 
      else if (url.startsWith("tel:")) { 
       Intent tel = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
       startActivity(tel); 
       return true; 
      } 
      else if (url.startsWith("mailto:")) { 
       String body = "Enter your Question, Enquiry or Feedback below:\n\n"; 
       Intent mail = new Intent(Intent.ACTION_SEND); 
       mail.setType("application/octet-stream"); 
       mail.putExtra(Intent.EXTRA_EMAIL, new String[]{"email address"}); 
       mail.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
       mail.putExtra(Intent.EXTRA_TEXT, body); 
       startActivity(mail); 
       return true; 
       } 
      return true; 
     } 
0

當您檢測到mailto:嘗試追加「?subject = custom」。像這樣的東西我想:

if (url.startsWith("mailto:")) { 
    Uri mailWithSubject = Uri.parse(url). 
      buildUpon().appendQueryParameter("subject", "Hello World!").build(); 
    Intent intent = new Intent(Intent.ACTION_VIEW, mailWithSubject); 
    ... 
} 
+0

好吧,我還挺按照你的邏輯,但我怎麼添加代碼爲「電話:」藏漢鏈接。就像我說的,我可以按照需要解決「mailto:」鏈接,但是在代碼中沒有「tel:」鏈接。更重要的是,如何在代碼中使用這兩個鏈接,只需在「mailto:」鏈接中進行輕微編輯以更改主題? – Loui

+0

你想用電話:鏈接做什麼? – ksasq

+0

電話:啓動撥號程序的鏈接。我可以同時使用mailto:&tel:鏈接,但不能在一起。那麼,如何編輯mailto:鏈接來添加我自己的主題並使用tel:鏈接以相同的方法啓動撥號程序? – Loui

1
@Override 
     public boolean shouldOverrideUrlLoading(WebView wv, String url) { 


      if(url.startsWith(TEL_PREFIX)) { 
       Intent intent = new Intent(Intent.ACTION_DIAL); 
       intent.setData(Uri.parse(url)); 
       startActivity(intent); 
       return true; 
      } 
      if (url.startsWith("mailto:")) { 


       String body = "Enter your Question, Enquiry or Feedback below:\n\n"; 


       Intent email = new Intent(Intent.ACTION_SEND); 
       email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); 
       email.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
       email.putExtra(Intent.EXTRA_TEXT, body); 
       //need this to prompts email client only 
       email.setType("message/rfc822"); 
       startActivity(Intent.createChooser(email, "Choose an Email client :")); 


       return true; 
       } 
      return false; 
     } 
    }); 
+0

它爲我工作。上面的答案是崩潰的mail.setType(「application/octet-stream」);我已糾正它。謝謝 – user1299132