Как подружить Android и WebView ?
17.10.2019

Как сделать, чтоб JavaScript передал данные Java, и принимал данные с Java
Визуально посмотреть, как создать веб приложение на андройдОткрываем андройд студио

Удаляем хеллоу ворлд, и из виджетов перетаскиваем вебвью

Сверху выбираем вкладку MainActivity.java и внутри protected void onCreate(Bundle savedInstanceState) добавить кодец

Если мы хотим создать приложение с ссылкой на сайт в сети, то добавляем этот код
WebView webView = (WebView) findViewById(R.id.web1);
webView.loadUrl("https://joyeshop.ru");
Только при использовании интернета, в манифест обязательно добавляем строчку
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Перед открытием <application , наглядно показал на скрине

А если мы хотим создать, чтоб веб страницы находились локально, то
webView.loadUrl("file:///android_asset/index.html");
А в манифест прописать
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
Добавим само место для хранения файлов сайта, для этого создадим папку. По java(в левой колонке), нажимаем правую кнопку мыши, new > folder > Assets Folder > ok

Мы создали эту папку. И если в ней создать index.html и вставить в путь
webView.loadUrl("file:///android_asset/index.html");
То эта страница откроется.
Для проверки в index.html напишем код с JS
Для проверки в index.html напишем код с JS
<button onclick="document.getElementById('dd').innerHTML='test5';">555</button>
<div id="dd">1</div>
Для работы javaScript на странице, после объявления переменной WebView webView, сразу добавим
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
Ещё несколько примеров вывода в web
WebView webView = findViewById(R.id.WebView);
// Пример 1: задать URL адрес
webView.loadUrl("https://android-tools.ru");
// Пример 2: задать HTML-файл из папки raw
webView.loadUrl("file:///Android_res/raw/some_file.HTML");
// Пример 3: задать HTML-файл из папки assets
webView.loadUrl("file:///Android_asset/some_file.HTML");
// Пример 4: задать содержимое HTML в виде строки
String rawHTML = ""+ "<h1>HTML content</h1>"+ "";
webView.loadData(t_html, "text/html; charset=UTF-8", null);
Передача с Java в JavaScript
При нажатии на кнопку, либо на какое либо действие добавляемmyWebView.loadUrl("javascript:document.getElementById('dd').innerHTML='Hi I java';");
Передача с JavaScript в Java
Создаём класс JavaScriptInterface
В нём к примеру кодец
public class JavaScriptInterface {
Context mContext;
JavaScriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
В нашем классе майнАктивити, После объявления веб, добавляем
webView.addJavascriptInterface(new JavaScriptInterface(this), "javaF");
А на самой web странице
<button onclick="document.getElementById('dd').innerHTML='test5';">555</button>
<div id="dd">1</div>
<button onclick="javaF.showToast('Hi I JavaScript to java');">777</button>

//В главном майн активити получилось
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = (WebView) findViewById(R.id.web1);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(this), "javaF");
//webView.loadUrl("https://joyeshop.ru");
webView.loadUrl("file:///android_asset/index.html");
}
}
Это и есть примеры общения java и javaScript, как в одну сторону, так и в другую.