2013-12-14 9 views
5

Ich habe das funktioniert wie es sollte mit dem folgenden Code. Alle http-URLs öffnen wie in der Webansicht, der Link "tel:" öffnet sich wie im Dialer und der Link "mailto:" öffnet sich wie im E-Mail-Client.Webview "mailto:" Link & "tel:" Link funktioniert mit Intent.ACTION_VIEW, aber wie füge ich eindeutige Betreff, dh für "mailto:" Link

Aber mein Problem ist, wie ändere ich das Thema des "mailto:" - Links zu etwas anderem anstelle von seinem vordefinierten Thema. Ich denke, es sollte 2 getrennte Absichten geben, 1 für "Tel:" Link & 1 für "mailto:" Link. Ich weiß einfach nicht, wie ich den Code in die Methode shouldOverrideUrlLoading setzen soll. Oder vielleicht verwende ich die falsche Methode für das, was ich brauche.

 @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; 
     } 

ich es geschafft, mein eigenes Thema zu bekommen „mailto:“ mit Absicht zu arbeiten, aber ohne die „tel:“ -Link im Code enthalten. Also, wie kann ich beides machen und mein eigenes Thema in "mailto:" Link verwenden?

Alle Ideen oder Vorschläge werden sehr geschätzt!

Antwort

8

Das ist meine Lösung ist & es für mich funktioniert. Ich hoffe, es hilft jedem anderen mit dem gleichen Problem, das ich hatte.

@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

Wenn Sie mailto ermitteln: versuchen Sie, "? Subject = custom" anzuhängen. So etwas wie dieses Ich denke:

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

Ok ich irgendwie Ihre Logik folgen, aber wie füge ich Code für "tel:" link ebenfalls. Wie ich schon sagte, ich kann den "mailto:" Link wie ich es will lösen, aber ohne "tel:" link in code. Was noch wichtiger ist, wie verwende ich beide Links in Code mit geringfügiger Bearbeitung nur in "mailto:" Link für Betreff ändern? – Loui

+0

Was möchten Sie mit den Tel: Links tun? – ksasq

+0

tel: Link zum Starten des Dialers. Ich kann beides mailto: & tel: links, aber nicht zusammen. Wie bearbeite ich mailto: link, um mein eigenes Thema hinzuzufügen und tel: link, um Dialer in derselben Methode zu starten? – 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

es funktioniert für mich.über die Antwort stürzte für mail.setType ("application/octet-stream"); Ich habe es korrigiert. Danke – user1299132

Verwandte Themen