【问题标题】:Starting an Activity from WebView click causes "Webpage not available"从 WebView 单击启动 Activity 会导致“网页不可用”
【发布时间】:2019-04-12 09:19:40
【问题描述】:

我正在尝试从 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中没有错误。但是点击链接时它没有启动购买活动。

【问题讨论】:

  • 嗨! ^_^ 请尝试@julianCDC 的回答并回复我认为这是解决方案

标签: android android-studio


【解决方案1】:

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

尝试将 activity_buy://Buy 重命名为 activitybuy://Buy。

【讨论】:

  • 非常感谢。你为我节省了很多时间。
【解决方案2】:

感谢answerRFC 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();
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
相关资源
最近更新 更多