Android Webview实现图片、文件上传及启动相机功能

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. webView.setWebChromeClient(webChromeClient);  

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. private String mCameraFilePath = null;  
  2. private ValueCallback<Uri> mUploadMessage;// 表单的数据信息  
  3. private final static int FILECHOOSER_RESULTCODE = 1;// 表单的结果回调</span>  
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. private WebChromeClient webChromeClient = new WebChromeClient() {  
  2.         // For Android 3.0+  
  3.         public void openFileChooser(ValueCallback<Uri> uploadMsg) {  
  4.             if (uploadMsg == null) {  
  5.                 return;  
  6.             }  
  7.   
  8.             mUploadMessage = uploadMsg;  
  9.             Intent i = new Intent(Intent.ACTION_GET_CONTENT);  
  10.             i.addCategory(Intent.CATEGORY_OPENABLE);  
  11.             i.setType("image/*");  
  12.             activity.startActivityForResult(  
  13.                     Intent.createChooser(i, "File Chooser"),  
  14.                     FILECHOOSER_RESULTCODE);  
  15.   
  16.         }  
  17.   
  18.         // For Android 3.0+  
  19.         public void openFileChooser(ValueCallback uploadMsg, String acceptType) {  
  20.             if (uploadMsg == null) {  
  21.                 return;  
  22.             }  
  23.   
  24.             mUploadMessage = uploadMsg;  
  25.             Intent i = new Intent(Intent.ACTION_GET_CONTENT);  
  26.             i.addCategory(Intent.CATEGORY_OPENABLE);  
  27.             i.setType("*/*");  
  28.             activity.startActivityForResult(  
  29.                     Intent.createChooser(i, "File Browser"),  
  30.                     FILECHOOSER_RESULTCODE);  
  31.         }  
  32.   
  33.         // For Android 4.1  
  34.         public void openFileChooser(ValueCallback<Uri> uploadMsg,  
  35.                 String acceptType, String capture) {  
  36.             if (uploadMsg == null) {  
  37.                 return;  
  38.             }  
  39.   
  40.             mUploadMessage = uploadMsg;  
  41.             Intent i = new Intent(Intent.ACTION_GET_CONTENT);  
  42.             i.addCategory(Intent.CATEGORY_OPENABLE);  
  43.             i.setType("image/*");  
  44.             activity.startActivityForResult(  
  45.                     Intent.createChooser(i, "File Chooser"),  
  46.                     FILECHOOSER_RESULTCODE);  
  47.   
  48.         }  
  49.   
  50.         private Intent createDefaultOpenableIntent() {  
  51.             // Create and return a chooser with the default OPENABLE  
  52.             // actions including the camera, camcorder and sound  
  53.             // recorder where available.  
  54.             Intent i = new Intent(Intent.ACTION_GET_CONTENT);  
  55.             i.addCategory(Intent.CATEGORY_OPENABLE);  
  56.             i.setType("*/*");  
  57.   
  58.             Intent chooser = createChooserIntent(createCameraIntent(),  
  59.                     createCamcorderIntent(), createSoundRecorderIntent());  
  60.             chooser.putExtra(Intent.EXTRA_INTENT, i);  
  61.             return chooser;  
  62.         }  
  63.   
  64.         private Intent createChooserIntent(Intent... intents) {  
  65.             Intent chooser = new Intent(Intent.ACTION_CHOOSER);  
  66.             chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents);  
  67.             chooser.putExtra(Intent.EXTRA_TITLE, "File Chooser");  
  68.             return chooser;  
  69.         }  
  70.   
  71.         private Intent createCameraIntent() {  
  72.             Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  73.   
  74.             File externalDataDir = Environment  
  75.                     .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);  
  76.             System.out.println("externalDataDir:" + externalDataDir);  
  77.             File cameraDataDir = new File(externalDataDir.getAbsolutePath()  
  78.                     + File.separator + "browser-photo");  
  79.             cameraDataDir.mkdirs();  
  80.             mCameraFilePath = cameraDataDir.getAbsolutePath() + File.separator  
  81.                     + System.currentTimeMillis() + ".jpg";  
  82.             System.out.println("mcamerafilepath:" + mCameraFilePath);  
  83.             cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,  
  84.                     Uri.fromFile(new File(mCameraFilePath)));  
  85.   
  86.             return cameraIntent;  
  87.         }  
  88.   
  89.         private Intent createCamcorderIntent() {  
  90.             return new Intent(MediaStore.ACTION_VIDEO_CAPTURE);  
  91.         }  
  92.   
  93.         private Intent createSoundRecorderIntent() {  
  94.             return new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);  
  95.         }  
  96. };  


 
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public void onActivityResult(int requestCode, int resultCode, Intent intent) {  
  2.         if (requestCode == FILECHOOSER_RESULTCODE) {  
  3.             if (null == mUploadMessage)  
  4.                 return;  
  5.             Uri result = intent == null || resultCode != Activity.RESULT_OK ? null  
  6.                     : intent.getData();  
  7.   
  8.             if (result == null && intent == null  
  9.                     && resultCode == Activity.RESULT_OK) {  
  10.                 File cameraFile = new File(mCameraFilePath);  
  11.   
  12.                 if (cameraFile.exists()) {  
  13.                     result = Uri.fromFile(cameraFile);  
  14.                     activity.sendBroadcast(new Intent(  
  15.                             Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, result));  
  16.                 }  
  17.             }  
  18.   
  19.             mUploadMessage.onReceiveValue(result);  
  20.             mUploadMessage = null;  
  21.         }   
  22. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值