2016-01-02 4 views
0

У меня есть 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.

+0

Но где вызова '' addJavascriptInterface? –

+0

Это было позже в коде (после ... в первом блоке). У меня был вопрос о том, что, поскольку другие вызовы javascript работали, я включил это правильно. Извините за путаницу. – leforgedroid

ответ

0

Я еще не могу написать комментарий, поэтому я пишу это как ответ.

Вы могли бы попробовать это answer:

myWebView.post(new Runnable() {...}); 

вместо использования new Handler

+0

Это меня близко. К сожалению, он не открывается в моем веб-браузере, но вместо этого спрашивает меня, хочу ли я открывать карты, Chrome и т. Д. Большое вам спасибо за помощь. – leforgedroid

+0

Я просто попробовал его с той же конфигурацией, что и ваш, но я использовал 'myWebView.setWebViewClient (новый WebViewClient())' вместо 'MyWebViewClient', и он работает в веб-представлении без запроса. Было бы неплохо отметить ответ, как принято, если он решает вашу проблему;) – MoQ93

+0

СПАСИБО! Ты обалденный! Мне нужно выяснить, ПОЧЕМУ это сработало, но это будет весело. :) Ответ принят ... с радостью. – leforgedroid

Смежные вопросы