将JavaScript值从Webview传递到Activity?Android

时间:2017-03-08 05:13:53

标签: javascript android string webview

我跟着this在Android中打印(热敏打印机

这是My web-view在那里点击它会加载我的Android活动,这是不在网络视图...

为此,我已经给出了......从网络视图中打开新活动..

public class Main_web extends AppCompatActivity {

private WebView webView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_m);

    webView = (WebView) findViewById(R.id.webm);

    WebSettings set = webView.getSettings();
    set.setJavaScriptEnabled(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    final ProgressDialog progressBar = ProgressDialog.show(Main_web.this, "Please Wait", "Loading...");

    webView.addJavascriptInterface(new WebAppInterface(this), "NewFUN");
    webView.requestFocusFromTouch();
    webView.setWebViewClient(new WebViewClient()

    {

        public void onPageFinished(WebView view, String url) {

            if (progressBar.isShowing()) {
                progressBar.dismiss();
            }
        }

    });

    webView.setWebChromeClient(new WebChromeClient());

    String url = "www.google.com/m_app_eta.php";
    //String url = "file:///android_asset/tex.html";
    try {

        if (URLUtil.isValidUrl(url)) {
            webView.loadUrl(url);

        } else {
          //do something
        }
    } catch (Exception e) {
         //do something

    }

}

//Class to be injected in Web page

public class WebAppInterface {

    Context mContext;
    WebAppInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void Print() {

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
        alertDialog.setTitle("Alert");
        alertDialog.setMessage("Are you sure you want to leave to next screen?");
        alertDialog.setPositiveButton("YES",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent chnIntent = new Intent(Main_web.this, Print_activity.class);
                        startActivity(chnIntent);
                    }
                });
        alertDialog.setNegativeButton("NO",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

        alertDialog.show();
    }

}
}

现在我的打印机活动工作正常所以这里我要传递一个值点击按钮打开打印机...但是可以任何人建议我如何在Android活动中接收相同的值而不是在网络视图... < / p>

我需要的只是在我的网页视图中点击按钮时加载Android活动以及我要将字符串值传递给新活动

为什么我应该传递值意味着我有一个Url所以我可以使用该URL进行打印 这里的JS值与当前URL不同

更新

我跟着this但是我在网络视图之外的内部网页视图...

表示当我点击网页视图时它的开放android活动与它相同的应该将值传递给我的活动而不是网页视图

更新1

我跟着@Sujal Mandal回答但是我不知道如何在下一个活动中使用该值任何人都可以建议我......在下一个活动中它可以在System.out.println或{{1 }}或任何其他text-view所以我可以使用can任何人建议如何在Web视图之外的其他活动中使用JavaScript值..

1 个答案:

答案 0 :(得分:1)

HTML JS CODE

<script type="text/javascript">
function Pa(value) {
       //value is the param received from onClick
       NewFUN.Print(value); //call the android method with value param
    }
</script>

<center>
    <h3>Sample HTML</h3>
    <div id="content">Click on Button To thermal print</div>
    <div>
        <input type="button" onClick="Pa('26997')" /><br/>
        </div>
</center>   

&安培;将您的Android代码更改为此类

@JavascriptInterface
    public void Print(final String stringFromWebView) {
        //use stringFromWebView
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
        alertDialog.setTitle("Alert");
        alertDialog.setMessage("Are you sure you want to leave to next screen?");
        alertDialog.setPositiveButton("YES",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent chnIntent = new Intent(Main_web.this, Print_activity.class);
                        chnIntent.putExtra("STRING_DATA", stringFromWebView);
                        startActivity(chnIntent);
                    }
                });
        alertDialog.setNegativeButton("NO",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
        alertDialog.show();
    }

在下一个活动中,使用

接收Web JS响应

String data = getIntent().getStringExtra("STRING_DATA");

在oncreate