Z
zblack
Gast
Halllo Android Freunde.
Ich entwickle eine App mit der Webview für Android SDK Version 16 (Android 4.1.2). und ich lasse in der Webview http://www.google.de laden. Das mache ich mit den Code:
Das Problem ist: wenn ich die App ausführe und in google irgendein Text eingebe und das den Link beim Suchergebnis klicke, dann sehe ich nur eine leere weisse Seite und sonst nichts.
In der ManifestDatei habe ich:
Der Code für WebviewClient sieht bei mir so aus:
Code für ChromeClient sieht wie folgt aus:
Javascript interface sieht bei mir so aus:
Doch leider klappt es nicht. Es wird immer wieder leere seite angezeigt.
Wenn ich die setJavaScript methode auskommentiere, dann geht es, nur dann sieht die Webseite am Handy schlecht aus.
Bitte Hilfe
Ich entwickle eine App mit der Webview für Android SDK Version 16 (Android 4.1.2). und ich lasse in der Webview http://www.google.de laden. Das mache ich mit den Code:
Code:
@SuppressLint({ "NewApi", "NewApi", "NewApi" })
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainlayout);
webView = (WebView) findViewById(R.id.browserwebview);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDefaultTextEncodingName("UTF-8");
webView.getSettings().setSaveFormData(true);
webView.getSettings().setSavePassword(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setPluginState(PluginState.ON);
manager = CookieManager.getInstance();
manager.setAcceptCookie(true);
manager.acceptCookie();
CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().sync();
CookieSyncManager.getInstance().startSync();
webView.setOnTouchListener(this);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setAppCacheEnabled(true);
webView.setVerticalScrollBarEnabled(false);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setGeolocationEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setDomStorageEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(), "MYSKRIPT");
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
webView.setWebViewClient(new WebClient());
webView.setWebChromeClient(new ChromeClient());
webView.loadUrl("http://www.google.de");
}
In der ManifestDatei habe ich:
Code:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Code:
private class WebClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
loadingFinished = false;
}
@Override
public void onPageFinished(WebView view, String url) {
if (!redirect) {
loadingFinished = true;
linearLayout.setVisibility(View.GONE);
view.loadUrl("javascript:(function() {" + Browser.javaskriptInjectCode + "})()");
webView.setVisibility(View.VISIBLE);
webView.removeAllViews();
dialog.dismiss();
}
if (loadingFinished && !redirect) {
} else {
redirect = false;
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, final String url) {
if (!loadingFinished) {
redirect = true;
}
if (url.startsWith("tel:")) {
intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
if (url.startsWith("mailto:")) {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
if (url.startsWith("http://maps"))
{
intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
view.loadUrl(url);
return true;
}
}
Code:
class ChromeClient extends WebChromeClient {
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
Browser.this.startActivityForResult(
Intent.createChooser(intent, "Image Browser"),
FILECHOOSER_RESULTCODE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != RESULT_OK ? null
: intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}
}
Code:
private final static String javaskriptInjectCode =
"function parseForm(event) {" +
" var form = this;" +
" if (this.tagName.toLowerCase() != 'form')" +
" form = this.form;" +
" var data = '';" +
" if (!form.method) form.method = 'get';" +
" var inputs = form.getElementsByTagName('input');" +
" for (var i = 0; i < inputs.length; i++) {" +
" var field = inputs[i];" +
" if (field.type != 'submit' && field.type != 'reset' && field.type != 'button')" +
" data += field.name + '=' + field.value + '&';" +
" }" +
" MYSKRIPT.putPostData(data);" +
"}" +
"" +
"for (var form_idx = 0; form_idx < document.forms.length; ++form_idx)" +
" document.forms[form_idx].addEventListener('submit', parseForm, false);" +
"var inputs = document.getElementsByTagName('input');" +
"for (var i = 0; i < inputs.length; i++) {" +
" if (inputs[i].getAttribute('type') == 'button')" +
" inputs[i].addEventListener('click', parseForm, false);" +
"}" +
"";
class JavaScriptInterface {
public void putPostData(String formData) {
postdata = formData;
}
}
Wenn ich die setJavaScript methode auskommentiere, dann geht es, nur dann sieht die Webseite am Handy schlecht aus.
Bitte Hilfe