![](/img/trans.png)
[英]Handling External Links in android WebView like Gmail App does
[英]Need help to make site with webView with external link handling like “magnet”
我已经使用webView从网站制作了一个简单的应用程序。 这是一个洪流站点。 我在网站上张贴了磁铁链接。 我想要的是,当我仅单击磁链链接时,所有torrent应用(例如bit-torrent)将自动捕获地址。 另外,所有其他外部站点链接都将在外部浏览器(例如Chrome)中打开。
我什至从这里都遵循了一些在线教程(stackoverflow),但是它们很老,并且使用了shouldOverrideUrlLoading
,但是Google表示在API级别24中不推荐使用此方法。
在这里https://developer.android.com/guide/webapps/webview.html我已跟随google使用此代码。(已修改为与我的网站匹配),但无法正常工作。 请有人帮助我。
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.example.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
这是我的Java主要活动代码now.now,现在网站中的每个链接都在webview中打开,但我不希望这样,对于磁链,它显示为此快照。
public class MainActivity extends Activity {
private WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webView);
// Configure related browser settings
myWebView.getSettings().setLoadsImagesAutomatically(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
// Configure the client to use when opening URLs
myWebView.setWebViewClient(new MyBrowser());
// Load the initial URL
myWebView.loadUrl("https://example.com");
}
@Override
public void onBackPressed() {
if(myWebView.canGoBack()) {
myWebView.goBack();
} else {
super.onBackPressed();
}
}
private class MyBrowser extends WebViewClient {
}
}
public boolean isAppInstalled(String packageName) {
try {
activity.getPackageManager().getApplicationInfo(
packageName, 0);
return true;
} catch (ActivityNotFoundException ex1) {
return false;
} catch (PackageManager.NameNotFoundException ex2) {
return false;
} catch (NullPointerException ex3) {
return false;
} catch (Exception ex4) {
return false;
}
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith.("magnet")) {
if(isAppInstalled('com.bittorrent.client')){
PackageManager pm = getApplicationContext().getPackageManager();
Intent appStartIntent =
pm.getLaunchIntentForPackage('com.bittorrent.client');
getApplicationContext().startActivity(appStartIntent);
}else{
// No matching app found, toast it.
}
}
return true;
}
}
使用此功能:更新了Nougut支持。 请记住在Android Studio中将sdk api级别升级到25。 否则可能会出错。
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
if (url.startsWith("magnet")) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
try {
startActivity(i);
} catch (ActivityNotFoundException e) {
Toast.makeText(getBaseContext(), "Team localpeers: No bittorent client installed in system.", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url=request.getUrl().toString();
if (url.startsWith("magnet")) { Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
try {
startActivity(i);
} catch (ActivityNotFoundException e) {
Toast.makeText(getBaseContext(), "Team localpeers: No bittorent client installed in Android.", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
我对磁铁链接也有同样的问题,我记得前一阵子我只是通过从Webview加载URL来设法链接磁铁链接,不幸的是,该解决方案在我的手机上不起作用(One Plus 5在Oreo上运行)。
我对这个问题的解决方案:1)您需要抓取要显示给用户的一个或多个URL。 就我而言,我有一个回收视图,用户可以在其中选择一个可以下载的项目(电影)。 为了抓取数据,我使用了那些库:
implementation "pl.droidsonroids:jspoon:1.3.0"
implementation "pl.droidsonroids.retrofit2:converter-jspoon:1.3.0"
您可以在此处检查实际需要如何使用来自此处链接的那些库。 抓取数据后,您需要向用户显示用户可以下载的项目的列表(在我的情况下),当用户单击其中一个项目时,您基本上使用的是之前抓取的磁铁网址并简单地应用此代码:
String url = "your magent url";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
无需使用任何Web视图或自定义WebViewClient。
一个小注释 (我检查了用户是否有洪流应用程序,然后他才能下载任何洪流,您只需使用packagemanager并检查其任何应用程序是否包含洪流)。
我只在手机上检查了此解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.