Сохраните данные в LocalStorage, а затем получите их, используя android Java - PullRequest
3 голосов
/ 06 мая 2020

Я загружаю локальную веб-страницу в свое приложение android, используя WebView, а мой web page имеет одну кнопку (скажем, «btnA»). Когда пользователь нажимает btnA, вызывается функция javascript, которая сохраняет deviceID в localstorage браузера *.

Теперь есть несколько вещей, которые я хотел бы спросить:

  1. Я показываю предупреждение, когда идентификатор устройства сохранен и это предупреждение работает нормально в приложении, но как я могу увидеть идентификатор устройства в браузере телефона после его сохранения? Я использую Chrome на своем телефоне, и я попытался перейти к Chrome> Настройки> Настройки сайта> Хранилище, но там ничего нет.
  2. Когда пользователь нажимает на btnA, я хочу запустить фоновый service через каждые 5 минут, которые попадают в api, и мне нужно передать идентификатор устройства (хранящийся в localStorage) как parameter для api. Как мне получить этот идентификатор устройства из localstorage в моем приложении android, чтобы я мог передать его в качестве параметра?

Вот как я загружаю веб-просмотр в приложение:

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;
}

1 Ответ

1 голос
/ 06 мая 2020

Вы можете создать интерфейс 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");

Затем вы можете отправить этот идентификатор в собственное приложение:

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

При вызове sendDeviceId() изнутри веб-сайта собственное приложение должно получить сохраненный deviceId. Это можно сделать в конце метода saveToLocalStorage().

Чтобы проверить локальное хранилище, вы можете открыть веб-сайт на своем смартфоне в браузере chrome, а затем подключить его к компьютеру и перейти на chrome://inspect/#devices из компьютер. Это должно показать вам открытые вкладки, и там есть ссылка для проверки, и это откроет инспектор веб-сайтов, где вы можете проверить локальное хранилище с этим веб-сайтом на вкладке «Приложение».

...