0

WebView を含む単純なネイティブ アプリケーションと、ネット上でホストされている作成した Web サイトがある場所に何かを実装しようとしています。

アイデアは、私の Android アプリがロードされ (そして、後で iOS もサポートされるようになります)、私が作成している Web サイトを webview にロードすることです。ただし、web ページの 1 つに id="LaunchNativeApp" という 1 つの要素があり、onClick を受信したときに、ネイティブ アプリケーションからバーコード スキャナーへのインテントを起動したいと考えています。どうすればこれを行うことができますか?

これの使用例は次のとおりです。

  1. ユーザーがネイティブ Android アプリを起動する

  2. ネイティブ android アプリが www.mywebsiteaddress.co.uk を読み込みます

  3. ユーザーは www.mywebsiteaddress.co.uk に移動し、ページ www.mywebsiteaddress.co.uk/inputDetails に移動します。

  4. ユーザーがテキスト入力フィールドをクリックする

  5. ネイティブ Android アプリがカメラをロード

  6. ユーザーがバーコードを読み取る

  7. テキスト入力フィールドに挿入されたバーコード

  8. リスト項目

ステップ 1 から 3 までは実行できます。ステップ 4 から 8 まではアドバイスが必要です。これが可能であれば、何かアイデアはありますか?

どうもありがとう

4

2 に答える 2

2

addJavascriptInterface(Object, String) を使用して、javascript から Java オブジェクトのメソッドを呼び出すこともできます。サーバー側のページにスクリプトを配置する必要はありません。 mWebView.loadUrl("javascript: {your JavaScript code here} "); を呼び出して JavaScript を挿入するだけで十分です。ページ内の HTML 要素を知っている場合。

于 2012-08-27T14:33:18.950 に答える
0

Webページで、ステップ4と同様のJavaScriptコードを実装できます。

window.location ='myApp:// message?param = X&param2 = Y';

次に、WebViewに、WebViewClientのshouldOverrideUrlLoading実装があります。

mWebView.setWebViewClient(new WebViewClient() 
{

    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {


        // handle myApp links
        if (url.startsWith("myApp"))
        {
            try
            {
                java.net.URI uri = new java.net.URI(url);

                // MESSAGE
                if (uri.getHost().equalsIgnoreCase("message"))
                {
                          // do something here...(e.g. load Camera activity)
                }

            }
            catch (Exception e)
            {
            }

            return (true);
        }

        return (false);
    }

});

ネイティブコードでjavascript呼び出しを「トラップ」し、それらに応答します(たとえば、カメラアクティビティのロードなど)。

次に、DOMページにコールバックすることで、結果をWebViewに戻すことができます。

String str = String.format("javascript:{your javascript code here}");
mWebView.loadUrl(str);
于 2012-05-15T18:36:59.790 に答える