Intereting Posts
Поставщик контента для получения результатов с веб-сервера? Как изменить отступы элементов подменю в NavigationView? Команда adb shell, чтобы открыть диалоговое окно удаления пакета Android Как дождаться начала потока в java Как отправить Android-библиотеку (aar) с помощью удаленных зависимостей (gradle)? Почему моя страница не отображается в правильном размере на Android даже с запросами Viewport / Media? Уведомление Android Wear Notification не отображается, если используется FLAG_NO_CLEAR Java.lang.NullPointerException (нет сообщения об ошибке) Com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL-рукопожатие отменено: Отправить совместимую версию приостановленного приложения в Google Play Как сделать макет с View заполнить оставшееся пространство? HTML для форматирования текста Воспроизведение локального аудиофайла в Android-приложении Android Хранение данных приложений Android на SD-карте Android Studio не может найти java-компилятор

Ссылка на Android-mailto не будет работать

Я прочитал много Вопросов об этой теме здесь, в stackoverflow, также мое решение пришло отсюда, но это не сработает. Также нет сообщения об ошибке.

У меня есть веб-просмотр в Android и на главной странице, есть некоторые ссылки mailto, когда я пытаюсь открыть ссылки mailto из своего веб-представления в mailclient, веб-просмотр всегда открывает почтовый адрес, как обычная веб-страница.

Может ли кто-нибудь взглянуть на мой код и рассказать мне, что случилось?

Спасибо за вашу помощь.

Код:

Файл манифеста:

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.TEST" 4 android:versionCode="1" 5 android:versionName="1.5" android:installLocation="auto"> 6 7 <uses-permission android:name="android.permission.INTERNET" /> 8 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 9 <uses-permission android:name="android.permission.ACCESS_GPS" /> 10 <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" /> 11 <uses-permission android:name="android.permission.ACCESS_LOCATION" /> 12 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 13 14 <uses-sdk 15 android:minSdkVersion="8" 16 android:targetSdkVersion="17" /> 17 18 <application 19 android:allowBackup="true" 20 android:icon="@drawable/ic_launcher" 21 android:label="@string/app_name" 22 android:theme="@style/AppTheme" > 23 <activity 24 android:name="com.example.lauffinderpro.MainActivity" 25 android:label="@string/app_name" > 26 <intent-filter> 27 <action android:name="android.intent.action.MAIN" /> 28 29 <category android:name="android.intent.category.LAUNCHER" /> 30 </intent-filter> 31 </activity> 32 </application> 33 34</manifest> 

main.xml

 1<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/FrameLayout1" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:paddingBottom="@dimen/vertical" 7 android:paddingLeft="@dimen/horizontal" 8 android:paddingRight="@dimen/horizontal" 9 android:paddingTop="@dimen/vertical" 10 tools:context=".MainActivity" > 11 12 <LinearLayout 13 android:layout_width="match_parent" 14 android:layout_height="match_parent" 15 android:orientation="vertical" > 16 17 <WebView 18 android:id="@+id/webView1" 19 android:layout_width="match_parent" 20 android:layout_height="0dp" 21 android:layout_weight="0.05" /> 22 23 <FrameLayout 24 android:layout_width="match_parent" 25 android:layout_height="wrap_content" 26 android:layout_weight="0.00" > 27 28 <LinearLayout 29 android:layout_width="match_parent" 30 android:layout_height="wrap_content" 31 android:baselineAligned="true" > 32 33 34 <Button 35 android:id="@+id/button1" 36 android:layout_width="0dp" 37 android:layout_weight="2" 38 android:layout_height="match_parent" 39 android:background="@drawable/upgradetest" 40 android:onClick="button1click" /> 41 42 <Button 43 android:id="@+id/button2" 44 style="?android:attr/buttonStyleSmall" 45 android:layout_width="0dp" 46 android:layout_weight="2" 47 android:layout_height="match_parent" 48 android:background="@drawable/globaltest" 49 android:onClick="button2click" /> 50 51 <Button 52 android:id="@+id/button3" 53 style="?android:attr/buttonStyleSmall" 54 android:layout_width="0dp" 55 android:layout_weight="2" 56 android:layout_height="match_parent" 57 android:background="@drawable/datetest" 58 android:onClick="button3click" /> 59 60 <Button 61 android:id="@+id/button5" 62 style="?android:attr/buttonStyleSmall" 63 android:layout_width="0dp" 64 android:layout_weight="2" 65 android:layout_height="match_parent" 66 android:layout_gravity="right" 67 android:background="@drawable/mehrtest" 68 android:onClick="button5click" /> 69 </LinearLayout> 70 71 </FrameLayout> 72 73 </LinearLayout> 74 75</FrameLayout> 

main.java

 1package com.example.lauffinderpro; 2 3import java.net.URISyntaxException; 4 5import android.net.MailTo; 6import android.net.Uri; 7import android.os.Bundle; 8import android.annotation.SuppressLint; 9import android.app.Activity; 10import android.app.AlertDialog; 11import android.content.Context; 12import android.content.DialogInterface; 13import android.content.Intent; 14import android.util.Log; 15import android.view.KeyEvent; 16import android.view.Menu; 17import android.view.View; 18import android.view.View.OnClickListener; 19import android.webkit.GeolocationPermissions; 20import android.webkit.WebChromeClient; 21import android.webkit.WebView; 22import android.webkit.WebViewClient; 23import android.widget.Button; 24import android.widget.ImageButton; 25 26public class MainActivity extends Activity { 27 28 29 protected void onCreate(Bundle savedInstanceState) { 30 super.onCreate(savedInstanceState); 31 setContentView(R.layout.activity_main); 32 33 34 //startet Upgrade als Standard 35 36 @SuppressLint("SetJavaScriptEnabled") 37 38 39 WebView myWebView = (WebView) findViewById (R.id.webView1); 40 myWebView.getSettings().setJavaScriptEnabled(true); 41 myWebView.loadUrl("WEBSITE"); 42 myWebView.setWebViewClient(new WebViewClient()); 43 44 45 } 46 47 48 49 /*public boolean onCreateOptionsMenu(Menu menu) { 50 // Inflate the menu; this adds items to the action bar if it is present. 51 getMenuInflater().inflate(R.menu.main, menu); 52 return true; 53 } 54 */ 55 56 57 public boolean shouldOverrideUrlLoading(WebView view, String url) { 58 if (url.startsWith("mailto:")) { 59 Intent intent = new Intent(Intent.ACTION_VIEW, 60 Uri.parse(url)); 61 startActivity(intent); 62 }else if(url.startsWith("http:") || url.startsWith("https:")) { 63 view.loadUrl(url); 64 } 65 return true; 66 } 67 68 69 public void button1click (View view) { 70 71 Code 72 73 } 74 75 76 public void button2click (View view) { 77 78 Code 79 80 } 81 82 83 84 public void button3click (View view) { 85 86 Code 87 88 } 89 90 91 92 public void button5click (View view) { 93 94 Code 95 96 } 97 98 99 100} 

РЕДАКТИРОВАТЬ:

Если я попробую это, я получаю сообщение об ошибке «Метод replaseFirst (String) не определен для типа String». В связи с этим я изменил url.replaseFirst на url.replaceFirst но ему нужен аргумент, поэтому мне нужно написать url.replaceFirst("mailto:", X ); , Для XI можно ввести mail , url или null . Я пробовал всех, каждый из которых получил сообщение о том, что мне нужно добавить оператор return, поэтому я сделал это с return false . Теперь у меня есть этот код:

 public class MyWebViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url.startsWith("mailto:")) { String mail = url.replaceFirst ("mailto:", mail); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_EMAIL, mail ); startActivity(Intent.createChooser(intent, "Send Email")); } return false; } } 

Это не работает. Поэтому я стараюсь, intent.setType("message/rfc822"); Вместо intent.setType("text/plain"); Но это также не работает.

Что я сделал не так?

EDIT2:

Новый код:

 public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url.startsWith("mailto:")) { String mail = url.replaceFirst("mailto:", ""); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, mail ); startActivity(Intent.createChooser(intent, "Send Email")); } else if(url.startsWith("http:") || url.startsWith("https:")) { view.loadUrl(url); } return true; } 

    Чтобы принудительно открыть почтовый клиент, вы можете попробовать следующее:

     if(url.startsWith("mailto:")) { String mail = url.replaceFirst("mailto:", ""); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, mail ); // intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); // if you want extra // intent.putExtra(Intent.EXTRA_TEXT, "I'm email body."); // if you want extra startActivity(Intent.createChooser(intent, "Send Email")); } else if ... { // your code as is } 

    Но другие «отправить» приложения тоже открыты, зависит от поддержки Intent.ACTION_SEND

    Вместо intent.setType("text/plain"); Здесь предлагается использовать intent.setType("message/rfc822"); Но я никогда не тестировал.


    Редактировать:

    Изменить строки main.java:

     // ... WebView myWebView = (WebView) findViewById (R.id.webView1); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.setWebViewClient(new MyWebViewClient()); // you name your class MyWebViewClient not WebViewClient myWebView.loadUrl("WEBSITE"); // also change line order // ... - // ... WebView myWebView = (WebView) findViewById (R.id.webView1); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.setWebViewClient(new MyWebViewClient()); // you name your class MyWebViewClient not WebViewClient myWebView.loadUrl("WEBSITE"); // also change line order // ... 

    Мой пример:

     Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"THE_EMAIL_ADDRESS_WITHOUT_mailto:"}); startActivity(Intent.createChooser(intent, "Send Email")); 

    Обратите внимание на строковый массив. Если вы передадите только строку, это не будет рассмотрено.

    Хотя это старый вопрос, который я нашел, ни один из ответов выше не работал для меня на 100%. Я хочу только открывать приложения электронной почты, а не текстовое сообщение и т. Д.

    Вместо этого я использовал этот код (без намерения.SetType)

     String[] email_address = new String[] {getString(R.string.email_address)}; Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", getString(R.string.email_address), null)); intent.putExtra(Intent.EXTRA_EMAIL, email_address); intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject_question)); startActivity(Intent.createChooser(intent, "Send Email")); 

    Дополнительная строка: intent.putExtra (Intent.EXTRA_EMAIL, email_address); Так это работает на всех версиях android.