十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
在安卓下,webview上傳圖片點(diǎn)擊是沒用的,需要自己寫一下.
網(wǎng)上關(guān)于這個(gè)的很多,基本都是抄來抄去,沒什么用的.
這個(gè)日期比較新,而且能用
http://blog.csdn.net/djcken/article/details/46379929#comments
就是自定義實(shí)現(xiàn) WebChromeClient
然后重寫 openFileChooser 方法,獲取 ValueCallback
當(dāng)然,要注意不同版本的區(qū)別.,但5.0+的項(xiàng)目,就不能用了.回復(fù)里有答案.
就是重寫 onShowFileChooser 但這次是 ValueCallback
雖然麻煩點(diǎn),但能實(shí)現(xiàn)
使用騰訊X5內(nèi)核http://x5.tencent.com/ 不用去考慮那些版本兼容,只要重寫openFileChooser 獲取 ValueCallback
在這些方法 可以直接跳轉(zhuǎn)相冊(cè)或相機(jī),也可以彈出對(duì)話框來選擇;
只需在 onActivityResult 方法獲取 android.net.Uri 對(duì)象就行
跳轉(zhuǎn)相冊(cè):
Intent intent = Intent(Intent., ); intent.setDataAndType(MediaStore.Images.Media., ); startActivityForResult(15);
相冊(cè)結(jié)果: Uri uri = data.getData();
跳轉(zhuǎn)相機(jī) :
private Uri photoUri;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ContentValues values = new ContentValues(); photoUri = context.getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); startActivityForResult(16); 相機(jī)結(jié)果: 直接 photoUri 就行 把圖片給網(wǎng)頁,用剛才獲取的valueCallback valueCallback.onReceiveValue(uri); 如果用戶取消就 valueCallback.onReceiveValue(null); 然后每次都要 uriValueCallback = null; 這些和網(wǎng)上的基本一樣,但今天被一個(gè)問題坑了很久... 錯(cuò)誤日志是這樣的 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=18, result=0, data=null} to activity {com.tugouzhong.micromall/com.tugouzhong.user.WebActivity}: java.lang.IllegalStateException: showFileChooser result was already called at android.app.ActivityThread.deliverResults(ActivityThread.java:3609) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3652) at android.app.ActivityThread.access$1300(ActivityThread.java:159) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5313) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1116) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:809) Caused by: java.lang.IllegalStateException: showFileChooser result was already called at com.tencent.smtt.webkit.x$14.a(Unknown Source) at com.tencent.smtt.webkit.x$14.onReceiveValue(Unknown Source) at com.tencent.smtt.sdk.o.a(Unknown Source) at com.tencent.smtt.sdk.o.onReceiveValue(Unknown Source) at com.test.user.WebActivity.onActivityResult(WebActivity.java:214) at android.app.Activity.dispatchActivityResult(Activity.java:6240) at android.app.ActivityThread.deliverResults(ActivityThread.java:3605) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3652) at android.app.ActivityThread.access$1300(ActivityThread.java:159) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5313) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1116) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:809) 這個(gè)是用的x5內(nèi)核的日志,用系統(tǒng)的也是java.lang.IllegalStateException這個(gè)問題. 網(wǎng)上找竟然沒發(fā)現(xiàn)同樣問題的人.... 自己看了下,原來是在openFileChooser方法里調(diào)用了 super.openFileChooser(valueCallback, acceptType, captureType); 把這句刪掉就行;
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。