天天看點

讓Android中的webview支援頁面中的檔案上傳

android webview在預設情況下是不支援網頁中的檔案上傳功能的;

如果在網頁中有<input type="file" />,在android webview中通路時也會出現浏覽檔案的按鈕

但是點選按鈕之後沒有反應...

那麼如何能夠讓android的webview能夠響應,這個浏覽按鈕呢?

我們需要為webview設定WebChromeClient,在WebChromeClient的實作類中覆寫檔案選擇的方法:

/***************** android中使用WebView來打開本機的檔案選擇器 *************************/
		// js上傳檔案的<input type="file" name="fileField" id="fileField" />事件捕獲
		// Android > 4.1.1 調用這個方法
		public void openFileChooser(ValueCallback<Uri> uploadMsg,
				String acceptType, String capture) {
			mUploadMessage = uploadMsg;
			Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
			intent.addCategory(Intent.CATEGORY_OPENABLE);
			intent.setType("image/*");
			context.startActivityForResult(
					Intent.createChooser(intent, "完成操作需要使用"),
					WebMainActivity.FILECHOOSER_RESULTCODE);

		}

		// 3.0 + 調用這個方法
		public void openFileChooser(ValueCallback<Uri> uploadMsg,
				String acceptType) {
			mUploadMessage = uploadMsg;
			Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
			intent.addCategory(Intent.CATEGORY_OPENABLE);
			intent.setType("image/*");
			context.startActivityForResult(
					Intent.createChooser(intent, "完成操作需要使用"),
					WebMainActivity.FILECHOOSER_RESULTCODE);
		}

		// Android < 3.0 調用這個方法
		public void openFileChooser(ValueCallback<Uri> uploadMsg) {
			mUploadMessage = uploadMsg;
			Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
			intent.addCategory(Intent.CATEGORY_OPENABLE);
			intent.setType("image/*");
			context.startActivityForResult(
					Intent.createChooser(intent, "完成操作需要使用"),
					WebMainActivity.FILECHOOSER_RESULTCODE);

		}
		/************** end ***************/
           

在設定WebChromeClient時,要傳入一個ValueCallback<Uri> mUploadMessage,同時傳入webview所在的Activity的對象;

在WebChromeClient的實作類中對應的檔案選擇事件響應的方法裡,使用webview所在的activity對象開啟一個android檔案選擇器,

使用startActivityForResult方法,在開啟的檔案選擇activity結束後需要傳回一個值;在webview所在的activity中通過覆寫Activity的onActivityResult方法,得到所需的結果,即選擇檔案的url

/**
	 * 傳回檔案選擇
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode,
			Intent intent) {
		if (requestCode == FILECHOOSER_RESULTCODE) {
			mUploadMessage = mWebChromeClient.getmUploadMessage();
			if (null == mUploadMessage)
				return;
			Uri result = intent == null || resultCode != RESULT_OK ? null
					: intent.getData();
			mUploadMessage.onReceiveValue(result);
			mUploadMessage = null;

		}
	}
           

完成上述操作後就成功的實作了android webview支援檔案上傳。。。