需要帮助使用webView创建具有外部链接处理功能的网站,例如“磁铁”

时间:2017-07-25 12:01:06

标签: android url android-intent android-webview magnet-uri

我使用webView从网站制作了一个简单的应用程序。这是一个洪流网站。我在网站上发布磁铁链接。我想要的是当我点击只有磁力链接所有的洪流应用程序像bit-torrent将自动捕获地址。此外,所有其他外部网站链接都将在Chrome等外部浏览器中打开。

我甚至从这里开始关注一些在线教程(stackoverflow),但它们已经过时并使用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主要活动代码now.now网站中的每个链接都在webview中打开,但我不希望这样,对于磁力链接,它显示如此快照。

error

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 {
}
}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用此:使用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;
    }

答案 2 :(得分:0)

我对磁铁链接也有同样的问题,我记得前一阵子我只是通过从Webview加载URL来设法链接磁铁链接,不幸的是,此解决方案在我的手机上不起作用(One Plus 5正在运行奥利奥)。

我对这个问题的解决方案: 1)您需要抓取要显示给用户的一个或多个URL。就我而言,我有一个回收视图,用户可以在其中选择一个可以下载的项目(电影)。为了抓取数据,我使用了那些库:

implementation "pl.droidsonroids:jspoon:1.3.0"
implementation "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);

无需使用任何Web视图或自定义WebViewClient。

一个小注释(我检查了用户是否有洪流应用程序,然后才能下载任何洪流,您只需使用packagemanager并检查其任何应用程序是否包含洪流)。

我只在手机上检查了此解决方案