需要帮助使用带有外部链接处理(如“磁铁”)的 webView 制作网站
Posted
技术标签:
【中文标题】需要帮助使用带有外部链接处理(如“磁铁”)的 webView 制作网站【英文标题】:Need help to make site with webView with external link handling like "magnet" 【发布时间】:2017-12-31 08:12:28 【问题描述】:我用 webView 从网站制作了一个简单的应用程序。这是一个洪流网站。我在网站上发布了磁铁链接。我想要的是,当我只点击磁力链接时,所有像 bit-torrent 这样的 torrent 应用程序都会自动捕获地址。此外,所有其他外部网站链接都将在 Chrome 等外部浏览器中打开。
我什至从这里 (***) 开始学习一些在线教程,但它们很旧并且使用了 shouldOverrideUrlLoading
,但 Google 表示此方法在 API 级别 24 中已弃用。
这里https://developer.android.com/guide/webapps/webview.html 我已跟随谷歌使用此代码。(修改为与我的网站匹配)但它不起作用。请有人帮我解决这个问题。
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 主要活动代码。现在网站中的每个链接都在 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
【问题讨论】:
【参考方案1】: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;
【讨论】:
hlw 感谢代码的赞赏,但我对代码有一些问题。很抱歉,我在这方面很新。public boolean isAppInstalled(String packageName) try activity.getPackageManager().getApplicationInfo( packageName, 0);
这里的活动以红色显示“无法解析符号活动”
这里的' if (url.startsWith. ("magnet"))' 这里的startsWith 以红色显示“无法解析符号startsWith”。
activity 是您当前活动的实例,您也可以直接在 Activity 代码中使用 getPackageManager()。只需清理代码,因为第二个注释问题非常奇怪和意外。
如果您的目标是牛轧糖(API 级别 24)及更高版本,请使用最新版本的 shouldOverrideUrlLoading 方法。【参考方案2】:
使用这个:更新了 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;
【讨论】:
【参考方案3】:我在使用磁力链接时遇到了同样的问题,我记得不久前我通过从 webview 加载 url 来设法链接磁力链接,不幸的是,这个解决方案在我的手机上不起作用(一加 5 正在运行奥利奥)。
我对这个问题的解决方案:
您需要抓取要显示给用户的一个或多个网址。就我而言,我有一个回收视图,用户可以在其中选择一个他可以下载的项目(电影)。为了抓取我使用这些库的数据:
实现“pl.droidsonroids:jspoon:1.3.0” 实现“pl.droidsonroids.retrofit2:converter-jspoon:1.3.0”
您可以在此处查看link 中您实际需要如何使用这些库。 抓取数据后,您需要向用户显示用户可以下载的项目列表(在我的情况下),当用户单击您基本上使用的项目之一时 您之前抓取的磁铁网址并应用此代码:
String url = "your magent url";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
无需使用任何 webviews 或自定义 WebViewClients。
小记(我检查了用户是否有 torrent 应用程序,然后他才能下载任何 torrent,您只需使用 packagemanager 并检查他的任何应用程序是否包含 torrent)。
我只在手机上查看过这个解决方案
【讨论】:
仅供参考,动词是 scrape,过去时 scraped,也是 scraper,scraping .废弃意味着像垃圾一样扔掉或战斗。以上是关于需要帮助使用带有外部链接处理(如“磁铁”)的 webView 制作网站的主要内容,如果未能解决你的问题,请参考以下文章