androidwebview上傳文件
『壹』 Android webview 上傳圖片為什麼 application/octet-stream
首先得找出問題的原因,你不妨做以下測試,看下問題是處在那端
用其他的軟體測試Server看是不是伺服器配置的事
你寫的Webview,Mainfest賦權是否正確
『貳』 怎樣讓android4.4的webview支持文件上傳
android4.4的webview無法支持文件上傳,因為openFileChooser()方法本身就不是公共的api。
1、WebKit是Mac OS X v10.3及以上版本所包含的軟體框架(對v10.2.7及以上版本也可通過軟體更新獲取)。 同時,WebKit也是Mac OS X的Safari網頁瀏覽器的基礎。WebKit是一個開源項目,主要由KDE的KHTML修改而來並且包含了一些來自蘋果公司的一些組件。
2、傳統上,WebKit包含一個網頁引擎WebCore和一個腳本引擎javaScriptCore,它們分別對應的是KDE的KHTML和KJS。不過,
3、隨著JavaScript引擎的獨立性越來越強,現在WebKit和WebCore已經基本上混用不分。
『叄』 怎麼解決安卓5.1.1 webview 不支持<input type="file" />
android里webview不支持input type=file的解決方法
activity定義
public ValueCallback<Uri> mUploadMessage;
public final static int FILECHOOSER_RESULTCODE = 1;
2.擴展WebChromeClient
WebChromeClient chromeClient = new WebChromeClientImpl();
view.setWebChromeClient(chromeClient);
3.實現WebChromeClientImpl類
private class WebChromeClientImpl extends WebChromeClient{
//擴展支持alert事件
@Override
public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
Builder builder = new Builder(view.getContext());
builder.setTitle("商機通提示").setMessage(message).setPositiveButton("確定", null);
builder.setCancelable(false);
builder.setIcon(R.drawable.ic_launcher);
AlertDialog dialog = builder.create();
dialog.show();
result.confirm();
return true;
}
//擴展瀏覽器上傳文件
//3.0++版本
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
activity.startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
}
//3.0--版本
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
activity.startActivityForResult(Intent.createChooser(i, "file Browser"),FILECHOOSER_RESULTCODE);
}
}
『肆』 Android WebView中如何實現類似於UC瀏覽器上傳文件時的選擇框
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.putExtra("return-data", true);
startActivityForResult(intent, 2);
後面用protected void onActivityResult(int requestCode, int resultCode, Intent data)
這個方法接受回調值
滿意請採納
『伍』 android 使用WebView上傳文件 混淆打包之後就無法調用openFileChooser這個方法了
android針對不同的版本有不同方法,上傳文件的話要重寫newsWeb.setWebChromeClient中的openFileChooser()方法.
『陸』 上傳圖片並預覽的網頁代碼在瀏覽器可以,但是在android的webview上不行
出現這個問題大多都是因為路徑不對
把你的圖片放進你要上傳的那個文件裡面,在從新增加這個張圖片就行了
上傳到空間有時會丟失銜接或圖片,你可以把丟失的那個HTML文件在空間刪了在從新上傳就可以了,記得把圖片也一同上傳
檢查一下路徑
你建站的文件在E:\1,那麼你的圖片途徑必須是E:\1\***.gif或***.JPGE等
『柒』 安卓 webview怎麼使用,求高手
Android和iOS系統都提供了標準的瀏覽器控制項,在android中是WebView,ios中為UIWebView。在iOS中你實例化一個UIWebView即可調用loadRequest來載入一個網頁,但是在Android中你不僅需要創建一個WebView,還需要做一些其他的事情。
『捌』 Android WebView 在開發過程中有哪些坑
WebView:
(一)、介紹:
android提供了一個內置瀏覽器,該瀏覽器可以查看網站,查看郵件,播放視頻。要使用該內置瀏覽器,要通過WebView組件實現。webView組件式專門用來瀏覽網頁的。
類結構:
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AbsoluteLayout
↳ android.webkit.WebView
(二)、webview組件常用方法:
loadUrl()
loadData()
loadDataWithBaseURL()
capturePicture()
goBack()
goForward()
stopLoading()
reload()
(三)、WebView組件顯示url頁面的內容:
1、基本代碼:
webView_main = (WebView) findViewById(R.id.webView_main);
webView_main.loadUrl("http://www.qq.com");
(四)、WebView組件載入html代碼:
1、基本代碼:
webView_main = (WebView) findViewById(R.id.webView_main);
// webView_main.loadData(data, "text/html","utf-8");//這個方法中雖然設置了字元集,但是運行效果中發現依然中文會顯示亂碼。為了解決這個問題,建議使用loadDataWithBaseURL()方法。
webView_main.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);
【備註:】MIME【了解】
概念:MIME意為多功能Internet郵件擴展,它設計的最初目的是為了在發送 電子郵件時附加多媒體數據,讓郵件客戶程序能根據其類型進行處理。然而當它被HTTP協議支持之後,它的意義就更為顯著了。它使得HTTP傳輸的不僅是普通的文本,而變得豐富多彩。
每個MIME類型由兩部分組成,前面是數據的大類別,例如聲音audio、圖象image等,後面定義具體的種類。
常見的MIME類型(通用型):
超文本標記語言文本 .html text/html
xml文檔 .xml text/xml
XHTML文檔 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文檔 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG圖像 .png image/png
GIF圖形 .gif image/gif
JPEG圖形 .jpeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂文件 mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二進制數據 application/octet-stream
2、如果載入的html代碼中包含javascript語言,會如何呢?
運行後發現,所有的javascript都不會執行。因為WebView 在默認情況下不支持javascript。如何讓執行javascript呢?
讓WebView支持javascript的兩個步驟:
使用 WebView 組件的WebSettings對象的setJavaScriptEnabled()方法。這種做法是讓 WebView 能支持絕大多數的javascript語言。但是依然不支持alert等警告對話框語句。
使用 WebView 組件的setWebChromeClient()方法。這種做法是讓 WebView 也支持顯示alert等警告對話框。
基本代碼:
webView_main.getSettings().setJavaScriptEnabled(true);// 支持運行javascript
webView_main.setWebChromeClient(new WebChromeClient());// 支持運行特殊的javascript(例如:alert())
webView_main.setWebViewClient(new WebViewClient());// 當點擊超鏈地址後不會新打開瀏覽器來訪問,而是始終在本app中瀏覽頁面
3、如果html中包含有超級鏈接地址,WebView能順利執行嗎?
經過運行後發現,WebView中的超鏈地址在點擊後,會跳出該應用程序,而彈出新的瀏覽器去訪問該網頁。
如果解決呢?調用webview對象的setWebViewClient()方法即可解決。
webView_main.setWebViewClient(new WebViewClient());
(五)、用WebView實現「網頁版天氣預告」
【備註:】調用頁面地址:http://m.weather.com.cn/m/pn12/weather.htm?id=101010100T
webView_main = (WebView) findViewById(R.id.webView_main);
webView_main.getSettings().setJavaScriptEnabled(true);
webView_main.setWebChromeClient(new WebChromeClient());
webView_main.setWebViewClient(new WebViewClient());
webView_main.loadUrl("http://m.weather.com.cn/m/pn12/weather.htm?id=101010100T");
(六)、製作簡單的網頁瀏覽器:
1、核心代碼:
publicclass MainActivity extends Activity {
privateEditText editText_main_url;
privateWebView webView_main;
private String url = "";
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText_main_url = (EditText) findViewById(R.id.editText_main_url);
webView_main = (WebView) findViewById(R.id.webView_main);
// 讓webview對象支持解析javascript語句
webView_main.getSettings().setJavaScriptEnabled(true);
// 讓webview對象支持解析alert()等特殊的javascript語句
webView_main.setWebChromeClient(new WebChromeClient());
// 如果不使用該句代碼,在點擊超鏈地址後,會跳出程序,而彈出瀏覽器訪問網頁。
webView_main.setWebViewClient(new WebViewClient());
}
publicvoid clickButton(View view) {
switch (view.getId()) {
// 瀏覽器中後退鍵監聽
caseR.id.button_main_goback:
webView_main.goBack();
break;
// 瀏覽器前進鍵監聽
caseR.id.button_main_goforward:
webView_main.goForward();
break;
// 當輸入網址後,點擊該按鈕,可以執行訪問
caseR.id.button_main_submit:
url = editText_main_url.getText().toString();
if ((url == null) || url.equals("")) {
Toast.makeText(MainActivity.this, "請輸入url地址!", Toast.LENGTH_LONG).show();
} else {
if (url.indexOf("http://") != 0) {
url = "http://" + url;
}
webView_main.loadUrl(url);
}
break;
// 瀏覽器停止載入鍵監聽
caseR.id.button_main_stop:
webView_main.stopLoading();
break;
// 瀏覽器刷新鍵監聽
default:
break;
}
}
}
『玖』 把HTML5的手機網站嵌入安卓APP中,發現<input type='file' />的上傳按鈕功能失效,點擊沒有任何反應
安卓APP的WebView默認屏蔽了該控制項的使用,有些安卓APP之所以能支持文件選擇和上傳,主要可能是有可能採取了如下措施之一:
(1)可能在該APP中重寫了相關方法(http://stackoverflow.com/questions/5907369/file-upload-in-webview)
(2)提供了JS Bridge來供web頁面調用
所以,單從前端技術上是解決不了這個問題的。
這個問題之所以不太好排查,一方面跟手機端的圖片上傳功能我不太常用到有很大關系,另一方面也因為見到一些其它的APP容器能支持該功能,所以思維在習慣上已經形成定勢,誤以為這是WebView默認就支持的。
末了,順便提醒一句,下次進行類似功能的需求評審,別忘了先了解下相應的APP容器是否支持該功能,如果沒有,則需要找到相應的客戶端開發同學評估一下工時,以免造成影響項目進度的風險