1. 程式人生 > >Android使用WebView從相簿/拍照中新增圖片

Android使用WebView從相簿/拍照中新增圖片

轉自:http://blog.csdn.net/djcken/article/details/46379929#

使用openFileChooser存在的問題。當彈出選擇圖片/相機框之後,取消選擇,就再也不能點選選擇按鈕了。這篇文章是為了記錄這一點,為驗證整個流程部署了後端,但是由於很久沒接觸後端,後端程式碼是網上的列子,所以後端程式碼和部署就不說了。單純的說下Android端的解決方案。

更新:Android5.0+的方法。

自定義兩個檔案:

  1. /** 
  2.  * 自定義 
  3.  * 
  4.  * @Author KenChung 
  5.  */
  6. publicclass ReWebViewClient 
    extends WebViewClient {  
  7.     @Override
  8.     publicvoid onPageStarted(WebView view, String url, Bitmap favicon) {  
  9.         super.onPageStarted(view, url, favicon);  
  10.     }  
  11.     @Override
  12.     publicvoid onPageFinished(WebView view, String url) {  
  13.         super.onPageFinished(view, url);  
  14.     }  
  15. }  

  1. /** 
  2.  * ReWebChomeClient 
  3.  * 
  4.  * @Author KenChung 
  5.  */
  6. publicclass ReWebChomeClient extends WebChromeClient {  
  7.     private OpenFileChooserCallBack mOpenFileChooserCallBack;  
  8.     public ReWebChomeClient(OpenFileChooserCallBack openFileChooserCallBack) {  
  9.         mOpenFileChooserCallBack = openFileChooserCallBack;  
  10.     }  
  11.     //For Android 3.0+
  12.     publicvoid openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {  
  13.         mOpenFileChooserCallBack.openFileChooserCallBack(uploadMsg, acceptType);  
  14.     }  
  15.     // For Android < 3.0
  16.     publicvoid openFileChooser(ValueCallback<Uri> uploadMsg) {  
  17.         openFileChooser(uploadMsg, "");  
  18.     }  
  19.     // For Android  > 4.1.1
  20.     publicvoid openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {  
  21.         openFileChooser(uploadMsg, acceptType);  
  22.     }  
  23.     // For Android 5.0+
  24.     @Override
  25.     publicboolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams   
  26. fileChooserParams) {  
  27.         mOpenFileChooserCallBack.showFileChooserCallBack(filePathCallback);  
  28.         returntrue;  
  29.     }  
  30.     publicinterface OpenFileChooserCallBack {  
  31.         void openFileChooserCallBack(ValueCallback<Uri> uploadMsg, String acceptType);  
  32.         void showFileChooserCallBack(ValueCallback<Uri[]> filePathCallback);  
  33.     }  
  34. }  

選擇圖片彈框使用AlertDialog:
  1. publicvoid showOptions() {  
  2.         AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);  
  3.         alertDialog.setOnCancelListener(new ReOnCancelListener());  
  4.         alertDialog.setTitle(R.string.options);  
  5.         alertDialog.setItems(R.array.options, new DialogInterface.OnClickListener() {  
  6.                     @Override
  7.                     publicvoid onClick(DialogInterface dialog, int which) {  
  8.                         if (which == 0) {  
  9.                             mSourceIntent = ImageUtil.choosePicture();  
  10.                             startActivityForResult(mSourceIntent, REQUEST_CODE_PICK_IMAGE);  
  11.                         } else {  
  12.                             mSourceIntent = ImageUtil.takeBigPicture();  
  13.                             startActivityForResult(mSourceIntent, REQUEST_CODE_IMAGE_CAPTURE);  
  14.                         }  
  15.                     }  
  16.                 }  
  17.         );  
  18.         alertDialog.show();  
  19.     }  

關鍵程式碼:(這裡的意思是取消彈框之後要告訴WebView不要再等待返回結果,設定為空就等於重置了狀態)
  1. privateclass ReOnCancelListener implements DialogInterface.OnCancelListener {  
  2.         @Override
  3.         publicvoid onCancel(DialogInterface dialogInterface) {  
  4.             if (mUploadMsg != null) {  
  5.                 mUploadMsg.onReceiveValue(null);  
  6.                 mUploadMsg = null;  
  7.             }  
  8.             if (mUploadMsg5Plus != null) {  
  9.            mUploadMsg5Plus.onReceiveValue(null);  
  10.            mUploadMsg5Plus = null;  
  11.         }  
  12.         }  
  13.     }  

完整MainActivity:
  1. /** 
  2.  * WebViewUpload 
  3.  * 
  4.  * @Author KenChung 
  5.  */
  6. publicclass MyActivity extends Activity implements ReWebChomeClient.OpenFileChooserCallBack {  
  7.     privatestaticfinal String TAG = "MyActivity";  
  8.     privatestaticfinalint REQUEST_CODE_PICK_IMAGE = 0;  
  9.     privatestaticfinalint REQUEST_CODE_IMAGE_CAPTURE = 1;  
  10.     private WebView mWebView;  
  11.     private Intent mSourceIntent;  
  12.     private ValueCallback<Uri> mUploadMsg;  
  13.     private ValueCallback<Uri[]> mUploadMsg5Plus;  
  14.     @Override
  15.     publicvoid onCreate(Bundle savedInstanceState) {  
  16.         

    相關推薦

    Android使用WebView相簿/拍照新增圖片

    轉自:http://blog.csdn.net/djcken/article/details/46379929# 使用openFileChooser存在的問題。當彈出選擇圖片/相機框之後,取消選擇,就再也不能點選選擇按鈕了。這篇文章是為了記錄這一點,為驗證整個流

    視頻提取圖片,對圖片做人臉檢測並截取人臉區域

    rep pan details 一個 ons sprintf imread href multipl 環境配置:VS2013+opencv2.4.10+libface.lib 參考博客:http://blog.csdn.net/augusdi/article/details

    教學課件PPT新增圖片如何操作

    教學課件PPT目前深受老師們的喜愛,各個科目、各個年齡層的老師都喜歡使用教學課件PPT進行授課。因為教學課件PPT使用起來很方便,上課效果也很好。大家都知道在教學課件PPT當中不單單只是教學文字內容,也會配以圖片,這樣不會顯得枯燥無味。今天小編就教給大家怎麼在教學課件PPT中新增圖片。 步驟如下: 老

    在textView新增圖片並設定圖片大小

    在TextView中新增圖片並設定圖片大小,按照如下方法即可: Drawable drawable = ContextCompat.getDrawable(getApplicationContext(), R.drawable.icon_arrow_mine);   &nb

    Altium Designer 的PCB新增圖片或logo的方法

    本文以Altium designer 6.9為例,其他版本大同小異: 1.點選DXP→Run Script.. 2.點選Browse 開啟:AD的安裝目錄下\Altium Designer 6\Examples\Scripts\Delphiscript Scripts\Pcb\PCB Log

    apicloud相機及相簿裡上傳圖片並剪下

    <template> <div class="chat" style="font-size: 0.16rem"> <img :src=tu /> <div @click="bb">點選上傳圖片</div> &

    模擬select,在option新增圖片

    <div class="changeState"> <div class="position-rel"> <div class="bank_xljt"> <img class="jt_x

    檔案讀取圖片,與資料庫表讀取圖片評測

    一、在 d:\ 下建立 image 資料夾,再放10 張圖片, 名稱從 1.png 到 10.png . 二、先建立新庫 db1, 然後按下面指令碼建立初始環境: USE db1 GO IF OBJECT_ID('t_path') IS NOT NULL DROP TABLE t_pat

    如何向Github README.md新增圖片

    1.先把圖片上傳到你的專案中;然後在github網站上按路徑開啟圖片,如下開啟的圖片連結: 2.複製圖片的地址 然後在README.md寫上: ![這裡隨便寫文字](你剛複製的圖片路徑) 注意  上面的感嘆號和中括號和小括號之間不能有空格(都是英文狀態下的)

    在github的README.md新增圖片

    想要為GitHub中上傳的專案新增圖片,需要在README.md中加入如下程式碼: ![Image text](http://raw.github.com/username/repository/master/images-folder/xxx.png) 要自己設定

    文本提取圖片路徑(java 解析富文本處理 img 標簽)

    element load select 方法 info 正則 項目 lis new 很多項目都需要到富文本來添加內容,就好比新聞啊,旅遊景點之類的,都需要使用富文本去添加數據,然而怎麽我這邊就發現了兩個問題 怎樣將富文本的圖片的 src 獲取出來? 方法一: 利用正則表達式

    android studio和github進行關聯和如何向README.md檔案新增圖片說明

    今天試了一下,在github裡面提交了簡單的工程檔案。挺好用的。 github越來越多的開發者參與,以後會經常參與其中。廢話不多說,幹活來啦! 如何使AS和github關聯 現在android開發基本都是使用android studio.在AS中,可以

    java-網路URL讀取圖片轉換成Base64字串-靠譜版

    剛開始開始參考了兩篇文章: http://blog.csdn.net/simba_cheng/article/details/52295169 http://blog.csdn.net/hfhwfw/article/details/5544408 發現生成的Base64字串

    向QWidget新增圖片,並使圖片隨窗體大小縮放

    向QWidget中新增圖片有多種方式,其中一種方法如下: // 部分核心程式碼片段 在Qt 5.7中編譯通過 QWidget * widget = new QWidget; widget->setAtuoFillBackground(true); Q

    《白鷺引擎01》場景新增圖片

    小編第一次接觸遊戲引擎 準備入白鷺的坑 看了看文件 發現根本看不懂只好找各種書和教程  然而由於版本更新很多程式碼已經執行不出來 在此一點一點記錄學習心得  第一篇我們就從熟悉專案目錄和給專案新增資源開始首先我們應該下載好白鷺引擎和編輯器  然後我們新建一個專案點選 檔案 

    eclipse新增圖片URL,提示空指標

    以下是學習過程中,書上的例項程式碼,博主對著敲了一遍卻無法執行。 import java.awt.*; import java.net.URL; import javax.swing.*; public class SwingAndThread extends JFram

    iOS 在textView新增圖片

    CMSListCell *cell = (CMSListCell *)[self.view viewWithTag:self.tag]; // textview add

    iOS新增圖片選擇器的實現

    //為imageview新增點選事件的方法,搜尋tap gesture 為圖片新增,並在右側選擇interfaceenable,後為左側的tap gesture拖入事件 //下方法為點選圖片後從相簿插

    javamail正文新增圖片和附件

    import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Properties; import javax.act

    Swing之JTextField新增圖片

    先看一張最終效果圖: 1、繼承來自JPasswordField的文字框 import java.awt.Graphics; import java.awt.Insets; import javax.swing.ImageIcon; import javax.swing