2013-12-14 22 views
5

Aşağıdaki kodu kullanması gerektiği gibi çalışıyorum. Tüm http URL'leri web görünümünde olması gerektiği gibi açılır, "tel:" bağlantısı çeviricide olması gerektiği gibi açılır ve "mailto:" bağlantısı e-posta istemcisinde olması gerektiği gibi açılır.Webview "mailto:" link & "tel:" bağlantısı Intent.ACTION_VIEW kullanarak çalışır, ancak nasıl benzersiz bir konu ekleyebilirim "mailto:" link

Ancak sorunum, "mailto:" bağlantısının konusunu önceden tanımlanmış konu yerine farklı bir şeye nasıl değiştirebilirim. Sanırım "mailto:" bağlantısı için "tel:" için & 1 olmak üzere 2 ayrı niyet olmalıdır. Sadece kodu aşağıdaki shouldOverrideUrlLoading yöntemine nasıl koyacağımı bilmiyorum. Ya da belki de ihtiyacım olan şey için yanlış yöntemi kullanıyorum.

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

Ben kendi konusu "mailto:" başardı Niyet ile çalışan, ancak olmadan "tel:" bağlantı kodu dahil. Peki her ikisini de "mailto:" bağlantısında kendi başlığımı nasıl kullanabilirim?

Herhangi bir fikir veya öneri çok takdir edilecektir!

cevap

8

Bu benim çözümdür. Umarım aynı sorunu olan herkese yardımcı olurum. Tamam

@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'yu algıladığınızda, buna "? Subject = custom" değerini eklemeyi deneyin. Böyle bir şey sanırım: Benim için böylesi &

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

Ben biraz senin mantığını takip ama nasıl "tel" için kod eklerim bağlantı lutfen. Dediğim gibi, "mailto:" bağlantısını istediğim gibi çözebilirim, ancak kodda "tel:" bağlantısı olmadan. Daha da önemlisi, koddaki her iki bağlantıyı, konu değişikliği için yalnızca "mailto:" bağlantısında hafif düzenleme ile nasıl kullanırım? – Loui

+0

Tel: Bağlantılar ile ne yapmak istersiniz? – ksasq

+0

tel: çeviriciyi başlatmak için bağlantı. Her iki mailto da yapabilirim: & tel: bağlantılar, ama birlikte değil. Peki, kendi özümü eklemek için mailto: bağlantısını nasıl düzenlerim ve tel: link'i aynı yöntemle başlatmak için bağlantıya sahip olurum? – 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

benim için çalışıyor.above cevabı mail.setType ("application/octet-stream") için çöküyordu; düzeltdim.Teşekkürler – user1299132