日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android webview拍照,在android 2.2/2.3中使用webview从camera中照相并且上传的实现

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android webview拍照,在android 2.2/2.3中使用webview从camera中照相并且上传的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近做了需要實現一個小功能,在安卓的離線數據錄入程序中,要支持文件的的上傳。簡單而言,就是在一個webview包裝起來的離線的Web

App中,通過input[type=file]的指定需要上傳的文件,然后點擊保存按鈕的時候將數據先保存到本地(因為是離線狀態),然后當網絡連通的時候再將數據和文件一起上傳到服務器。由于程序主要操作界面是一個類似于phonegap封裝的純JS的Web

APP,所以基本上限定了文件的選擇獲取只能通過input[type=file]來。并且由于一般安卓的手機或者平臺都是支持相機的,所以我手欠的加了一個便捷的功能:點擊input[type=file]時直接從相機照相然后保存數據的功能。這就是這一趟受罪的開始。

一般來說,實現這種功能,都是在webview的WebChromeClient中覆蓋掉openFileChooser方法,打開文件選擇,網上一般流傳的都市從安卓系統的瀏覽器源代碼里抄出來的這一套:

public void

openFileChooser(ValueCallback uploadMsg) {

openFileChooser(uploadMsg,

"**");

Intent chooser =

createChooserIntent(createCameraIntent());

chooser.putExtra(Intent.EXTRA_INTENT,

i);

((Activity)

ctx).startActivityForResult(chooser, 5173);

}

public ValueCallback

getValueCallback() {

return

this.mUploadMessage;

}

private Intent

createChooserIntent(Intent... intents) {

Intent chooser = new

Intent(Intent.ACTION_CHOOSER);

chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS,

intents);

chooser.putExtra(Intent.EXTRA_TITLE,

ctx.getString(R.string.FileBrowser));

return chooser;

}

private Intent

createCameraIntent() {

Intent cameraIntent = new

Intent(MediaStore.ACTION_IMAGE_CAPTURE);

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,

Uri.fromFile(new File(imageFilePath)));

return cameraIntent;

}

除此之外就是在Activity的onActivityResult的方法中判斷如果是從相機來就直接從圖像路徑取圖而不是從Intent里取數據。

但是很不幸的是,這套代碼在安卓2.2/2.3上是不能實現從相機照相然后傳到input[type=file]上的,file控件總是顯示空白。各種奇異的情況總是讓人莫名的很抓狂。

由于功能要的緊,我頭一個晚上弄的晚上4點都沒找到解決的辦法。這個似乎就是webview的限制。于是第二天一早起來接著看,就連stackoverflow上都一幫人說沒辦法解決,我差點就直接放棄了。靜下心來一想,為什么直接從圖片庫中選擇的圖片能夠在file控件中正確的顯示而就只文件的不行呢?難道就是因為WebView不支持file://格式的Uri而僅僅只支持content格式的Uri?

于是我傻乎的又去把android的java部分的源代碼弄下來,可問題是居然部分的實現都是native的代碼,在系統自帶的瀏覽器里是把uri和文件路徑的映射存在了BrowserFrame的一個hashmap里,似乎在Java這一層和Webview的file控件的聯系就這么直接的斷了。

于是又換一個方向,既然webView不支持file://格式的Uri,那我為何不將file://格式的Uri轉換成content://格式的Uri呢?于是又是一番搜索,兩行代碼就搞定了這個事情:

String media

=MediaStore.Images.Media.insertImage(getContentResolver(),filepath,"","");

result = Uri.parse(media);

mUploadMessage.onReceiveValue(result);

總之,在人類這個世界上寫程序,面對很多莫名其妙的問題時,如果變通一下一小部分的問題還是能解決的。希望下次我碰到的還是這種能解決的小疑難。呵呵呵。

總結

以上是生活随笔為你收集整理的android webview拍照,在android 2.2/2.3中使用webview从camera中照相并且上传的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。