У меня есть webView в моем приложении. Сначала WebView открывает HTML-страницу, которую я создал с помощью нескольких кнопок на ней. Кнопки выполняют различные задачи (я пытаюсь научиться пользоваться веб-окнами), например: 1) показывать тосты Android, 2) показывать предупреждение javascript, 3) вибрировать телефон, 4) показывать текущую геолокацию, 5) открывать карты Google в webView.webView loadURL не работает на кнопке HTML
Это последний, который не работает. Я искал этот сайт и многие другие, но не нашел решения, которое работает.
Я абсолютно уверен, что у меня есть весь файл файла манифеста (все остальное работает, включая начальную интернет-страницу в Интернете). Я рад сообщить об этом, хотя, если вы считаете, что это необходимо.
Мой файл activity_main.xml никогда не давал мне проблем, но снова я рад опубликовать это, если вы считаете, что это поможет.
Вот отрывки из моего кода:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webView);
myWebView.loadUrl(url); // this one works
myWebView.setWebViewClient(new MyWebViewClient());
WebSettings webSettings = myWebView.getSettings();
webSettings.setBuiltInZoomControls(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setJavaScriptEnabled(true);
webSettings.setGeolocationEnabled(true);
...
}
Это все работает и снова другие кнопки HTML работают. Тогда это:
public class WebAppInterface {
Context mContext;
//** Instantiate the interface and set the context *//
WebAppInterface(Context c) {
mContext = c;
}
//** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void vibrateDevice() {
Vibrator mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
mVibrator.vibrate(500);
}
@JavascriptInterface
public void showMapCurPos() {
new Handler().post(new Runnable() {
String url2 = "http://www.google.com/maps/@53.001153,-95.0752916,15z";
@Override
public void run() {
myWebView.clearCache(true);//Here you call the methond in UI thread
myWebView.loadUrl(url2);
}
});
}
}
Все там работает, за исключением showMapCurPos(). Я уже пробовал просто простой myWebView.loadUrl (...) и несколько попыток намерений. В зависимости от того, что я пробовал, иногда этот метод вызывает сбой приложения, но большую часть времени новый URL-адрес просто не отображается, и он остается на исходном URL-адресе.
Пожалуйста, простите меня, если это повторный вопрос, но я действительно искал этот сайт и многие другие для ответа (возможно, для солидного 8 часов или около того). Я пробовал многие из этих ответов безрезультатно. Я предполагаю, что это что-то простое и имеет отношение к моему отсутствию понимания webViews или действий или намерений, или всех трех, или, может быть, даже моей новизны для разработки Android.
Но где вызова '' addJavascriptInterface? –
Это было позже в коде (после ... в первом блоке). У меня был вопрос о том, что, поскольку другие вызовы javascript работали, я включил это правильно. Извините за путаницу. – leforgedroid