Я пытаюсь обработать ссылки whatsapp://, sms: и mailto: в веб-просмотре из-за кнопки «Поделиться» на моем веб-сайте. Каждый раз, когда я нажимаю «Поделиться» и выбираю один из вариантов, я получаю сообщение об ошибке ERR_UNKOWN_URL_SCHEME, и оно не открывает другое приложение, которое я выбрал.
Я попробовал большинство ответов StackOverflow, и, похоже, ничего не работает.
Я добавил несколько сообщений Toast, но они тоже не отображаются.
Как я могу заставить эти ссылки начать свою деятельность и сделать внешние URL-адреса «_blank» открытыми во внешнем браузере в моем приложении?
Мой код:
package wai.govgymappnew;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.URLUtil;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
public class MainActivity extends AppCompatActivity {
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// AdMob banner ad test id: ca-app-pub-3940256099942544/6300978111
MobileAds.initialize(this, "ca-app-pub-3940256099942544/6300978111");
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
WebView webview = findViewById(R.id.webview);
WebSettings webSettings = webview.getSettings();
webview.getSettings().setUseWideViewPort(true);
webview.getSettings().setLoadWithOverviewMode(false);
webview.setInitialScale(100);
webSettings.setJavaScriptEnabled(true);
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (URLUtil.isNetworkUrl(url)) {
return false;
}
if (appInstalledOrNot(url)) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} else {
Toast.makeText(MainActivity.this, "No activity found", Toast.LENGTH_LONG).show();
}
return true;
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
Toast.makeText(MainActivity.this, "No activity found", Toast.LENGTH_LONG).show();
}
return false;
}
});
if (savedInstanceState == null) {
webview.setWebViewClient(new WebViewClient());
webview.loadUrl("https://myurl.com");
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
WebView webview = findViewById(R.id.webview);
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (webview.canGoBack()) {
webview.goBack();
} else {
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
WebView webview = findViewById(R.id.webview);
super.onSaveInstanceState(outState);
webview.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
WebView webview = findViewById(R.id.webview);
super.onRestoreInstanceState(savedInstanceState);
webview.restoreState(savedInstanceState);
}
}
Это именно то, что я получил в своем коде и, к сожалению, не работает.




Вам может понадобиться этот ответ, чтобы решить вашу проблему: stackoverflow.com/a/41693364/6266501