如何实现webview上传图片
2016-04-15 11:18
274 查看
//主界面
//布局文件
package com.example.webview_js; import java.io.File; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.ActivityNotFoundException; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnKeyListener; import android.webkit.ConsoleMessage; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import android.widget.Toast; @SuppressLint("SetJavaScriptEnabled") public class MainActivity extends Activity { protected static final int FILECHOOSER_RESULTCODE = 1; //定义控件 private WebView mWebView; private ProgressBar mProgressBar; //定义接口 private Uri imageUri; public ValueCallback<Uri> mUploadMessage; public final static int REQ_CHOOSER = 1; private final static int REQ_CAMERA = 2; @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final String url = "http://101.200.142.201/Login/index?redirect_uri=http%3A%2F%2F101.200.142.201%2F"; mWebView=(WebView) findViewById(R.id.mywebview); mProgressBar=(ProgressBar) findViewById(R.id.my_progresss); mWebView.loadUrl(url); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setDefaultTextEncodingName("utf-8"); mWebView.setWebViewClient(new MyWebViewClient()); mWebView.getSettings().setJavaScriptEnabled(true); //设置webview视图 mWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int progress) { mProgressBar.setVisibility(View.VISIBLE); mProgressBar.setProgress(progress); if (progress >= 80) { mProgressBar.setVisibility(View.GONE); } } // For Android 3.0- @SuppressWarnings("unused") public void openFileChooser(ValueCallback<Uri> uploadMsg) { openFileChooser(uploadMsg,""); } @SuppressWarnings("unused") public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { //选择图片 openFileChooser(uploadMsg,acceptType); } // For Android 4.1 @SuppressWarnings("unused") public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType, String capture) { mUploadMessage=uploadMsg; selectImage(); } }); } public class MyWebViewClient extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub mWebView.loadUrl(url); return true; } } /** * * 弹出框,,选择图片 */ protected final void selectImage() { AlertDialog.Builder builder = new Builder(MainActivity.this); builder.setOnCancelListener(new ReOnCancelListener()); final String[] items = { "照相机", "相册" }; builder.setItems(items, new DialogInterface.OnClickListener() { @SuppressLint("SdCardPath") public void onClick(DialogInterface dialog, int which) { Intent intent = null; switch (which) { case 0: Toast.makeText(getApplicationContext(), items[0], Toast.LENGTH_SHORT).show(); intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 必须确保文件夹路径存在,否则拍照后无法完成回调 File vFile = new File(Environment .getExternalStorageDirectory().getPath() + "/DCIM/Camera/" + (System.currentTimeMillis() + ".jpg")); if (!vFile.exists()) { File vDirPath = vFile.getParentFile(); vDirPath.mkdirs(); } else { if (vFile.exists()) { vFile.delete(); } } //或得图片的url imageUri = Uri.fromFile(vFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); MainActivity.this .startActivityForResult(intent, REQ_CAMERA); break; case 1: Toast.makeText(getApplicationContext(), items[1], Toast.LENGTH_SHORT).show(); intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); /*// 裁切图片 intent.putExtra("crop", "true"); // 裁切的宽高比率 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // 设置输出的图片大小 intent.putExtra("outputX", 200); intent.putExtra("outputY", 200); intent.putExtra("return-data", true);*/ MainActivity.this.startActivityForResult( Intent.createChooser(intent, "选择图片"), REQ_CHOOSER); break; } } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.create().show(); } //(这里的意思是取消弹框之后要告诉WebView不要再等待返回结果,设置为空就等于重置了状态) private class ReOnCancelListener implements DialogInterface.OnCancelListener { @Override public void onCancel(DialogInterface dialogInterface) { if (mUploadMessage != null) { mUploadMessage.onReceiveValue(null); mUploadMessage = null; } } } //回调方法 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub switch (requestCode) { //相册 case REQ_CHOOSER: if (resultCode == Activity.RESULT_OK) { if (null == mUploadMessage) return; Uri result = data == null || resultCode != RESULT_OK ? null : data .getData(); mUploadMessage.onReceiveValue(result); mUploadMessage = null; }else{ mUploadMessage.onReceiveValue(null); mUploadMessage = null; } break; //相机 case REQ_CAMERA: if (resultCode == Activity.RESULT_OK) { mUploadMessage.onReceiveValue(imageUri); mUploadMessage = null; }else{ mUploadMessage.onReceiveValue(null); mUploadMessage = null; } break; } super.onActivityResult(requestCode, resultCode, data); } // 此按键监听的是返回键,能够返回到上一个网页(通过网页的hostlistery) public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } }
//布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.webview_js.MainActivity" > <WebView android:id="@+id/mywebview" android:layout_width="match_parent" android:layout_height="match_parent"/> <ProgressBar android:id="@+id/my_progresss" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="36dp" /> </RelativeLayout>
相关文章推荐
- iOS 系统图片详解
- android时间定时器的应用,短信验证码,定时刷新页面
- android studio中ndk的使用
- HTML5来了:5个好用的混合式App开发工具
- HTML5+开发移动app教程1-环境搭建
- jni问题汇总
- innerHTML与appendChild(newnodeText)的区别
- Android动画常用公共属性详解
- Android 的快速开发框架XUtils
- 【转】Android Activity原理以及其子类描述,androidactivity
- HTML5移动端开发中的Viewport标签及相关CSS用法解析
- Swift中文教程(一)基础数据类型
- 《iOS Human Interface Guidelines》——App Icon
- AlertDialog(弹出对话框)
- Android开发之获取相册照片和获取拍照照片
- 关于APP,原生和H5开发技术的争论 APP开发技术选型判断依据
- 微信开发踩坑从服务器配置开始
- android如何实现悬浮窗口
- ios下 模态viewController
- Android实现全屏显示的方法