从WebView单击启动活动会导致“网页不可用”

时间:2018-11-08 19:39:00

标签: android android-studio

我正在尝试从html webview开始另一项活动。所以我有一个有效的链接,但第二个链接不起作用。它说 “ 网页不可用

public class acilisbir extends AppCompatActivity {

WebView myBrowser;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_acilisbir);

    myBrowser = (WebView) findViewById(R.id.anasayfagetir);
    myBrowser.setWebViewClient(new MyBrowser());
    myBrowser.getSettings().setJavaScriptEnabled(true);
    myBrowser.loadUrl("file:///android_asset/anasayfa.html");
}

 private class MyBrowser extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
//This link is work
if (url.equalsIgnoreCase("Navigation://OpenNativeScreen")) {
                startActivity(new Intent(acilisbir.this,AnaEkran.class));
                finish();
                return true;
             //But this is not
            }else if (url.equalsIgnoreCase("activity_buy://Buy")) {
                startActivity(new Intent(acilisbir.this,Buy.class));
                finish();
                return true;
            }
            return false;
        }
    }

}

我已添加到我的 manifest

<activity android:name="Buy" >
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.VIEW" />
                <data android:scheme="activity_buy" />
            </intent-filter>
        </activity>

HTML链接代码

<INPUT TYPE="test" value="Test" onClick="window.location='Navigation://OpenNativeScreen'">
<INPUT TYPE="buycr" value="Buycr" onClick="window.location='activity_buy://Buy'">

在这里,定位购买活动的链接不起作用。我在android studio中没有错误。但是当点击链接时,它没有启动BuyActivity。

2 个答案:

答案 0 :(得分:2)

根据wikipedia,您的方案不得包含任何其他包含字母或“ +”,“-”,“。”的字符。

尝试重命名activity_buy://购买到activitybuy://购买。

答案 1 :(得分:0)

感谢answer,并根据RFC 2396

附录A: URI方案应遵循以下规定:

scheme        = alpha *( alpha | digit | "+" | "-" | "." )

然后替换为:

url.equalsIgnoreCase("activity_buy://Buy")
"window.location='activity_buy://Buy'"

使用方式:

url.equalsIgnoreCase("activity.buy://Buy")
"window.location='activity.buy://Buy'"
  • 请考虑投票 JulianCDC answer,以提及预期问题的参考。

更新

您可以使用Uri.pasre(url)代替url.equalsIgnoreCase

Uri uri = Uri.parse(url);
String scheme = uri.getScheme();
String host = uri.getHost();
switch (scheme){
    case "Navigation":
        handleNavigation(host);
        break;
    case "activity.buy":
        handleActivityActions(host);
        break;
}

private void handleNavigation(String host) {
    // do other stuff
    if ("OpenNativeScreen".equals(host)) {
        startActivity(new Intent(acilisbir.this, AnaEkran.class));
        finish();
    }
}

private void handleActivityActions(String host) {
    // do other stuff
    if ("Buy".equals(host)) {
        startActivity(new Intent(acilisbir.this,Buy.class));
        finish();
    }
}