我的应用中有一个webview,通常可以正常加载网站。但我无法让www.gmail.com工作:当我打开www.gmail.com时,我看到了登录页面,尝试登录,之后屏幕变黑,我的应用程序/进程被杀死。
我在logcat中看不多,只是抛出了一些奇怪的调试信息,如下所示。
但通常https网站工作正常,甚至更复杂的登录程序,如打开stackoverflow.com,通过https登录openid,回到stackoverflow,所有工作在我的webview中没有问题。只有gmail.com给我这些问题。
编辑: 我发现如果我没有将自定义MyWebViewClient分配给webview,则应用程序不会崩溃,而是在默认系统浏览器中打开gmail站点。但我不希望这样。我希望它只在我自己的网页浏览中打开。
我在http://code.google.com/p/android/issues/detail?id=12097创建了一个错误报告,附加到它是一个非常简单的示例项目,可以重现崩溃。
I/DEBUG ( 2173): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 2173): Build fingerprint: 'Samsung/GT-I9000/GT-I9000/GT-I9000:2.1-update1/ECLAIR/XWJM6:user/release-keys'
I/DEBUG ( 2173): pid: 6753, tid: 6793 >>> com.myapplication.android <<<
I/DEBUG ( 2173): signal 11 (SIGSEGV), fault addr 0000004c
I/DEBUG ( 2173): r0 00000000 r1 00000000 r2 00000000 r3 aa476ae0
I/DEBUG ( 2173): r4 00000000 r5 4c2f5b74 r6 aa476ae0 r7 00595dec
I/DEBUG ( 2173): r8 4c2f5da8 r9 444a7eb8 10 444a7ea0 fp 004be758
I/DEBUG ( 2173): ip aa4770fc sp 4c2f5b50 lr aa1112bf pc aac0a5ac cpsr 48000030
I/DEBUG ( 2173): #00 pc 0000a5ac /system/lib/libsqlite.so
I/DEBUG ( 2173): #01 pc 001112bc /system/lib/libwebcore.so
I/DEBUG ( 2173): #02 pc 001118e2 /system/lib/libwebcore.so
I/DEBUG ( 2173): #03 pc 00111a80 /system/lib/libwebcore.so
I/DEBUG ( 2173):
I/DEBUG ( 2173): code around pc:
I/DEBUG ( 2173): aac0a59c f7ff60e3 2000fd49 bf00bd70 4604b570
I/DEBUG ( 2173): aac0a5ac 460d6cc0 f7ff4616 f8c4fd9d 230150e0
I/DEBUG ( 2173): aac0a5bc 60e4f8c4 508cf8d4 f885e002 68ad30ff
I/DEBUG ( 2173):
I/DEBUG ( 2173): code around lr:
I/DEBUG ( 2173): aa1112ac 68004905 e0021859 68002100 f6f9460a
I/DEBUG ( 2173): aa1112bc bd10ec32 0036583c ffc9a849 4604b570
I/DEBUG ( 2173): aa1112cc 46281d05 fd64f20b 46286826 60263e01
I/DEBUG ( 2173):
I/DEBUG ( 2173): stack:
I/DEBUG ( 2173): 4c2f5b10 00000000
I/DEBUG ( 2173): 4c2f5b14 aa31c6d3 /system/lib/libwebcore.so
I/DEBUG ( 2173): 4c2f5b18 00000000
I/DEBUG ( 2173): 4c2f5b1c aa011171 /system/lib/libwebcore.so
I/DEBUG ( 2173): 4c2f5b20 00000000
I/DEBUG ( 2173): 4c2f5b24 afe3ae08 /system/lib/libc.so
I/DEBUG ( 2173): 4c2f5b28 afe3db7c
I/DEBUG ( 2173): 4c2f5b2c afe0f170 /system/lib/libc.so
I/DEBUG ( 2173): 4c2f5b30 00000000
I/DEBUG ( 2173): 4c2f5b34 afe3ae08 /system/lib/libc.so
I/DEBUG ( 2173): 4c2f5b38 00595dec [heap]
I/DEBUG ( 2173): 4c2f5b3c afe0f170 /system/lib/libc.so
I/DEBUG ( 2173): 4c2f5b40 00595ddc [heap]
I/DEBUG ( 2173): 4c2f5b44 4c2f5b74
I/DEBUG ( 2173): 4c2f5b48 df002777
I/DEBUG ( 2173): 4c2f5b4c e3a070ad
I/DEBUG ( 2173): #00 4c2f5b50 00595ddc [heap]
I/DEBUG ( 2173): 4c2f5b54 4c2f5b74
I/DEBUG ( 2173): 4c2f5b58 aa476ae0 /system/lib/libwebcore.so
I/DEBUG ( 2173): 4c2f5b5c aa1112bf /system/lib/libwebcore.so
I/DEBUG ( 2173): #01 4c2f5b60 00595ddc [heap]
I/DEBUG ( 2173): 4c2f5b64 aa1118e7 /system/lib/libwebcore.so
D/Zygote ( 2181): Process 6753 terminated by signal (11)
I/ActivityManager( 2237): Process com.myapplication.android (pid 6753) has died.
XML:
<WebView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:theme="@style/Theme.NoBackground"
android:id="@+id/webView"/>
代码:
webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setAllowFileAccess(false);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAppCacheEnabled(true);
WebViewClient wv = new MyWebViewClient();
webView.setWebViewClient(wv);
/**
* Customized webview client to allow mp4 to play in mediaplayer.
*/
final class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.endsWith(".mp4")) {
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(url));
view.getContext().startActivity(intent);
return true;
} else {
return super.shouldOverrideUrlLoading(view, url);
// instead of the line above, I have also tried this before without any difference:
// view.loadUrl(url);
// return true;
}
}
答案 0 :(得分:1)
我得出结论这是一个错误。错误报告位于http://code.google.com/p/android/issues/detail?id=12097,我还得到Mark Murphy在Android Dev邮件列表上确认它可能是一个低级Android操作系统错误。