将数据保存到 LocalStorage,然后使用 android Java 检索它

Save data to LocalStorage and then retrieve it using android Java

我正在使用 WebView 在我的 android 应用程序中加载本地网页,我的 web page 有一个按钮(比方说 "btnA")。当用户单击 btnA 时,将调用 javascript 函数,将 deviceID 保存在浏览器的 localstorage.

现在有两件事想请教一下:

  1. 我在保存 deviceID 时显示了一条警报,并且该警报在应用程序中运行良好,但是保存后我如何在 phone 的浏览器中看到该 deviceID?我在我的 phone 中使用 Chrome,我尝试转到 Chrome > 设置 > 网站设置 > 存储,但那里什么也没有。
  2. 当用户点击 btnA 时,我想 运行 背景 service 每 5 分钟点击一次 api 并且我需要传递设备 ID(存储在 localStorage 中) 作为 api 的 parameter。我如何从我的 android 应用程序中的 localstorage 获取该设备 ID,以便我可以将其作为参数传递?

这是我在应用程序中加载 webview 的方式:

webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("file:///android_res/raw/index.html");

这是我的网页:

<!DOCTYPE html>
<html>

<head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <meta content="utf-8" http-equiv="encoding">
</head>

<body>
    <button type="submit" value="Click Me" onclick="saveToLocalStorage()">Click Me</button>
    <script src="./app.js" type="text/javascript"></script>
</body>

</html>

这是我的 app.js:

function saveToLocalStorage() {
    var generatedString = randomString(9, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
    if(localStorage.getItem("deviceID") == null){
        localStorage.setItem("deviceID", generatedString);
        alert("DeviceID saved.")
    }

}

function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}

您可以创建一个 Javascript 界面:

public class JavaScriptInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    JavaScriptInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void deviceId(String deviceId) {
        // Do whatever you want with the deviceId
    }
}

并将其传递给网络视图:

webView.addJavascriptInterface(new JavaScriptInterface(this), "injectedObject");

然后您可以将该 ID 发送到本机应用程序:

<script type="text/javascript">
    function sendDeviceId() {
        injectedObject.deviceId(localStorage.getItem("deviceID"));
    }
</script>

通过从网站内部调用 sendDeviceId(),本机应用程序应该会收到存储的 deviceId。这可以在 saveToLocalStorage() 方法的末尾完成。

要检查本地存储,您可以在 chrome 浏览器中打开智能手机上的网站,然后将其连接到计算机并从计算机访问 chrome://inspect/#devices。这应该会显示您打开了选项卡并且有一个 link 可以在那里检查,这将打开网站检查器,您可以在其中检查应用程序选项卡中该网站的本地存储。