开发者

gmail.com not working on webview (after login)

I have a webview in my app that generally works fine for loading websites. But I cannot get www.gmail.com to work: when I open www.gmail.com I see the login page, try to login, afterwards the screen goes black and my app/process is killed.

I don't see much in my logcat, just some strange debug information is being dumped as below.

But generally https sites work fine, and even more complicated login procedures like opening stackoverflow.com, logging in via openid through https, back to stackoverflow, all work without a problem in my webview. Only gmail.com is giving me these problems.

Edit: I found that if I don't assign my custom MyWebViewClient to the webview, the app doesn't crash but opens the gmail site in the default system browser. But I don't want that. I want it to open in my own webview only.

I created a bug report at http://code.google.com/p/android/issues/detail?id=12097, attached to it is a working very simple sample project that reproduces the crash.

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"/>

Code:

    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;
    }
}


I conclude this is a bug. Bug report is at http://code.google.com/p/android/issues/detail?id=12097 and I also got Mark Murphy confirming on the Android Dev mailing list that it's probably a low level Android OS bug.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜