您好,登錄后才能下訂單哦!
本篇文章為大家展示了Android項目中如何在webview頁面中上傳文件,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Android webview在默認情況下是不支持網頁中的文件上傳功能的;
如果在網頁中有<input type="file" />,在android webview中訪問時也會出現瀏覽文件的按鈕
但是點擊按鈕之后沒有反應...
那么如何能夠讓android的webview能夠響應,這個瀏覽按鈕呢?在網上查了很多資料,很多相同的,但都漏掉了一個地方,導致無法讀取到文件的完整地址(“c:\upfile\233232.jpg”),整理最終代碼入下:
我們需要為webview設置WebChromeClient,在WebChromeClient的實現類中覆蓋文件選擇的方法:
package com.example.webviewupfile; import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.content.res.Configuration; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; public class MainActivity extends Activity { private ValueCallback<Uri> mUploadMessage; private final static int FILECHOOSER_RESULTCODE = 1; private WebView web; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); web = (WebView) findViewById(R.id.webView1); progressBar = (ProgressBar) findViewById(R.id.progressBar1); web = new WebView(this); web.getSettings().setJavaScriptEnabled(true); web.loadUrl("http://ueditor.baidu.com/website/onlinedemo.html"); web.setWebViewClient(new myWebClient()); web.setWebChromeClient(new WebChromeClient() { // The undocumented magic method override // Eclipse will swear at you if you try to put @Override here // For Android 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("image/*"); MainActivity.this.startActivityForResult( Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE); } // For Android 3.0+ public void openFileChooser(ValueCallback uploadMsg, String acceptType) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("*/*"); MainActivity.this.startActivityForResult( Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE); } // For Android 4.1 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); MainActivity.this.startActivityForResult( Intent.createChooser(i, "File Chooser"), MainActivity.FILECHOOSER_RESULTCODE); } }); setContentView(web); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == FILECHOOSER_RESULTCODE) { if (null == mUploadMessage) return; Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData(); // mUploadMessage.onReceiveValue(result); // mUploadMessage = null; Bitmap bm = null; //外界的程序訪問ContentProvider所提供數據 可以通過ContentResolver接口 ContentResolver resolver = getContentResolver(); try { Uri originalUri = intent.getData(); // 獲得圖片的uri bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); // 這里開始的第二部分,獲取圖片的路徑: String[] proj = { MediaStore.Images.Media.DATA }; // 好像是android多媒體數據庫的封裝接口,具體的看Android文檔 Cursor cursor = managedQuery(originalUri, proj, null, null, null); // 按我個人理解 這個是獲得用戶選擇的圖片的索引值 int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); // 將光標移至開頭 ,這個很重要,不小心很容易引起越界 cursor.moveToFirst(); // 最后根據索引值獲取圖片路徑 String path = cursor.getString(column_index); Uri uri = Uri.fromFile(new File(path)); mUploadMessage.onReceiveValue(uri); } catch (IOException e) { Log.e("TAG-->Error", e.toString()); } } } public class myWebClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // TODO Auto-generated method stub super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { // TODO Auto-generated method stub super.onPageFinished(view, url); progressBar.setVisibility(View.GONE); } } // flipscreen not loading again @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } // To handle "Back" key press event for WebView to go back to previous // screen. /* * @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if * ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) { web.goBack(); * return true; } return super.onKeyDown(keyCode, event); } */ }
上述內容就是Android項目中如何在webview頁面中上傳文件,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。