SharedPreferences подружить с веб-приложением webView

123
15 июля 2019, 13:00

Пишу веб-приложение на связке php/js/html, и через Andriod Studio конвертирую его в приложение для плеймаркета.

Для хранения небольших данных испльзую local.storage в js И что бы приложение могло записать что либо в local.storage открываю в манифесте доступ к записи/чтению

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Но мне нужно только хранить одну строку с данными (ключ) Всё остальное идёт как обычный сайт c обменом данными js-php через ajax

Но пользователи, которые устанавливают приложение, у них идёт запрос "разрешите чтение/запись файлов на ваше устройство". (так как стоит запрос доступа).

Я хочу этого избежать, и слышал что в андроиде есть SharedPreferences - некое место куда можно записать небольшие данные без запроса доступа.

Вопрос: можно ли как-то это использовать для обычных веб приложений, что бы избежать запроса на чтение/запись? Спасибо.

UPD: Нашел переходник, как использовать в js Android SharedPreferences Как я понял - это то что мне нужно, использовать Android SharedPreferences в интерфейсе javascript в вебприложении

Вот ссылка на гитхаб https://github.com/paolorotolo/JSharedPreferences

Но при установке той части которая идет в mainactivity 14-ая строка выдает ошибку:

  mStorage = c.getSharedPreferences(c.getResources().getString(R.string.key_file), 0);

а именно светиться красным key_file.

Помогите с этим разобраться. Код из гитхаба написал 4 года назад, может что-то уже не актульно и работает не так как нужно?

Answer 1

c.getResources().getString(R.string.key_file) - это получение строки из ресурсов (которой у Вас нет).
Вы можете добавить её нажав на красную лампочку, выскакивающую на ошибке и выбрав соответствующее предложение, либо вписать ручками в файл (документация).
Или просто заменить на текстовую константу:

mStorage = c.getSharedPreferences("my_pref_file_name", 0);

То есть в этом выражении строка задаёт имя файла преференсов и определять её в ресурсах не обязательно.

P.S. Я с такой задачей не сталкивался, но мне кажется что для local.storage в js, WebView должна использовать приватное хранилище, разрешение на доступ к которому не требуется. Может быть Вы не правильно задали настройки (WebSettings)?

READ ALSO
Что значит return в JavaScript?

Что значит return в JavaScript?

При изучении JavaScript, я дошел до returnНе понимал для чего это надо

133
Автозапуск видео IFrame в Yandex Browser и Chrome

Автозапуск видео IFrame в Yandex Browser и Chrome

Поместил видео с YouTube в теле сайта, используя IFrame APIЕсть ли возможность обойти блокировку автозапуска со звуком видео в браузере Yandex Browser и Chrome?

146
Не работает import из Chunk в Chunk

Не работает import из Chunk в Chunk

Этот файл импортирован через const Areas = () => import( /* webpackChunkName: "radar" */ '/radar/Areas

131
Прокрутка до якоря на странице, если вызов осуществляется из iframe

Прокрутка до якоря на странице, если вызов осуществляется из iframe

В adSense сделал заглушку, указал в ней ссылку вида <a href="#bottomblock"> а на сайте соответствующий блокВот только при нажатии ничего не происходит,...

159