2017-07-25 63 views
0

我使用webView的网站做了一个简单的应用程序。这是一个洪流网站。我在该网站发布磁链接。我想要的是当我只点击磁铁链接时,所有洪流应用程序就像bit-torrent会自动捕捉地址。此外,所有其他外部网站链接都将在Chrome等外部浏览器中打开。需要帮助,使webView与外部链接处理,如“磁铁”

我按照一些在线教程,甚至从这里(计算器),但他们都老了,而且shouldOverrideUrlLoading,但谷歌表示,这种方法是在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 { 
} 
} 

回答

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

hlw谢谢你的代码赞赏,但我有一些问题与code.sorry说,即时通讯非常新的。 '公布尔isAppInstalled(字符串的packageName){ 尝试{ activity.getPackageManager()getApplicationInfo( 的packageName,0);' 此活动显示,如果以红色 –

+0

“不能解析符号活动”,在这里“( url.startsWith。(“magnet”))' here startsWith显示“无法解析符号startsWith”红色。 –

+0

活动是您当前活动的实例,您也可以直接在活动代码中使用getPackageManager()。只需清理代码,因为第二个注释的问题非常奇怪且意外。 –

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