首页 > 解决方案 > android无法设置值以在webview中输入标签

问题描述

我使用 javascript 接口调用 android java 函数来扫描 qr 码,但我无法设置值以在 webview 中输入标签

代码 :

public class MainActivity extends AppCompatActivity {

WebView myWebView;
String result;
String js;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getSupportActionBar().hide();
    myWebView = (WebView)findViewById(R.id.myWebView);
    myWebView.loadUrl("http://192.168.1.20/testsite/index.php");
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.getSettings().setDomStorageEnabled(true);
    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                view.loadUrl(request.getUrl().toString());
            }
            return false;
        }
    });
    myWebView.addJavascriptInterface(new WebViewJavaScriptInterface(this), "app");
}


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 99 && resultCode == RESULT_OK){

        if (data != null) {
            result = data.getStringExtra("result");
            setResult();
        }

    }
}

void setResult(){
    js = "javascript:document.getElementById('txt_result').value="+result;
    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            if (Build.VERSION.SDK_INT >= 19) {
                view.evaluateJavascript(js, new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String s) { }
                });
            } else {
                view.loadUrl(js);
            }
        }
    });
}


public class WebViewJavaScriptInterface {

    private Context context;

    /*
     * Need a reference to the context in order to sent a post message
     */
    public WebViewJavaScriptInterface(Context context) {
        this.context = context;
    }

    /*
     * This method can be called from Android. @JavascriptInterface
     * required after SDK version 17.
     */
    @JavascriptInterface
    public void scanqr() {
        Intent intent = new Intent(MainActivity.this, ScanQrCodeActivity.class);
        startActivityForResult(intent, 99);
    }
}

}

标签: android

解决方案


推荐阅读