Просмотр исходного кода

办件可获取本地视频;添加录像功能;

owen лет назад: 7
Родитель
Сommit
f95c2b24a9

+ 76 - 12
app/src/main/java/com/wiipu/peopleheart/cases/CaseFragment.java

@@ -10,6 +10,7 @@ import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
+import android.provider.MediaStore;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -58,8 +59,11 @@ public class CaseFragment extends BaseMvpFragment {
 
     private ValueCallback<Uri> uploadMessage;
     private ValueCallback<Uri[]> uploadMessageAboveL;
+
+    private int mResultCode = Activity.RESULT_CANCELED;
     private final static int FILE_CHOOSER_RESULT_CODE = 10000;
     private final static int REQUEST_CAMERA = 10001;
+    private final static int REQUEST_VIDEO = 10002;
     private boolean needClearHistory = false;
     private LoadingDialog mLoadingDialog;
     @Override
@@ -124,13 +128,13 @@ public class CaseFragment extends BaseMvpFragment {
         //设置WebView属性,能够执行Javascript脚本
         WebSettings webSettings=mWebView.getSettings();
         webSettings.setJavaScriptEnabled(true);
-        //  webSettings.setAllowFileAccess(true);// 设置允许访问文件数据
-        //webSettings.setSupportZoom(true);
-        //  webSettings.setBuiltInZoomControls(true);
-        //  webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
-        //  webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
-        //  webSettings.setDomStorageEnabled(true);
-        //  webSettings.setDatabaseEnabled(true);
+        webSettings.setAllowFileAccess(true);// 设置允许访问文件数据
+        webSettings.setSupportZoom(true); // 允许缩放
+        webSettings.setBuiltInZoomControls(true);
+     //   webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
+        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 不加载缓存内容
+        webSettings.setDomStorageEnabled(true);
+     //   webSettings.setDatabaseEnabled(true);
         webSettings.setUseWideViewPort(true);
 
 
@@ -211,7 +215,8 @@ public class CaseFragment extends BaseMvpFragment {
     }
 
     private void openImageChooserActivity() {
-        final String[] items = new String[] { "相机", "文件" };
+        final String[] items = new String[] { "相机", "录像" , "照片/视频"};
+      //  final String[] items = new String[] { "相机", "照片/视频"};
         // 创建对话框构建器
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         // 设置参数
@@ -221,8 +226,10 @@ public class CaseFragment extends BaseMvpFragment {
                     public void onClick(DialogInterface dialog, int which) {
                         if (items[which].equals("相机")) {
                             chooseFromCamera();
-                        } else {
+                        } else if(items[which].equals("照片/视频")) {
                             chooseFromFile();
+                        }else {
+                            chooseFromVideo();
                         }
                     }
                 });
@@ -240,14 +247,25 @@ public class CaseFragment extends BaseMvpFragment {
     private void chooseFromFile() {
         Intent i = new Intent(Intent.ACTION_GET_CONTENT);
         i.addCategory(Intent.CATEGORY_OPENABLE);
-        i.setType("image/*");
+        i.setType("video/;image/");
         startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
     }
 
+    private void chooseFromVideo() {
+        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
+        //设置视频质量       
+        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
+        //设置视频时长
+        intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
+        //开启摄像机       
+        startActivityForResult(intent, REQUEST_VIDEO);
+
+    }
 
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
+        mResultCode = resultCode;
         if (requestCode == FILE_CHOOSER_RESULT_CODE) {
             if (null == uploadMessage && null == uploadMessageAboveL) return;
             Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
@@ -257,8 +275,9 @@ public class CaseFragment extends BaseMvpFragment {
                 uploadMessage.onReceiveValue(result);
                 uploadMessage = null;
             }
-        } else if (requestCode == REQUEST_CAMERA) {
-
+        }
+        else if (requestCode == REQUEST_CAMERA) {
+            // 照相
             if (null == uploadMessage && null == uploadMessageAboveL) return;
             Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
             if (uploadMessageAboveL != null) {
@@ -268,6 +287,29 @@ public class CaseFragment extends BaseMvpFragment {
                 uploadMessage = null;
             }
         }
+        else if (requestCode == REQUEST_VIDEO) {
+            // 视频
+            if (null == uploadMessage && null == uploadMessageAboveL) return;
+            Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
+            if (uploadMessageAboveL != null) {
+                if (resultCode == RESULT_OK) {
+                    uploadMessageAboveL.onReceiveValue(new Uri[]{result});
+                    uploadMessageAboveL = null;
+                } else {
+                    uploadMessageAboveL.onReceiveValue(new Uri[]{});
+                    uploadMessageAboveL = null;
+                }
+            } else if (uploadMessage != null) {
+                if (resultCode == RESULT_OK) {
+                    uploadMessage.onReceiveValue(result);
+                    uploadMessage = null;
+                } else {
+                    uploadMessage.onReceiveValue(Uri.EMPTY);
+                    uploadMessage = null;
+                }
+            }
+
+        }
     }
 
 
@@ -351,4 +393,26 @@ public class CaseFragment extends BaseMvpFragment {
     public void onViewClicked() {
         onBackPressed();
     }
+
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        // 取消选择时需要回调onReceiveValue,否则网页会挂住,不会再响应点击事件
+        if (mResultCode == Activity.RESULT_CANCELED) {
+            try {
+                if (uploadMessageAboveL != null) {
+                    uploadMessageAboveL.onReceiveValue(null);
+                }
+                if (uploadMessage != null) {
+                    uploadMessage.onReceiveValue(null);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+
+    }
+
 }

+ 49 - 10
app/src/main/java/com/wiipu/peopleheart/home/HomeNewFragment.java

@@ -1,6 +1,7 @@
 package com.wiipu.peopleheart.home;
 
 import android.annotation.TargetApi;
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.ClipData;
 import android.content.DialogInterface;
@@ -9,6 +10,7 @@ import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
+import android.provider.MediaStore;
 import android.text.TextUtils;
 import android.text.format.DateFormat;
 import android.util.Log;
@@ -61,8 +63,10 @@ public class HomeNewFragment extends BaseMvpFragment{
 
     private ValueCallback<Uri> uploadMessage;
     private ValueCallback<Uri[]> uploadMessageAboveL;
+    private int mResultCode = Activity.RESULT_CANCELED;
     private final static int FILE_CHOOSER_RESULT_CODE = 10000;
     private final static int REQUEST_CAMERA = 10001;
+    private final static int REQUEST_VIDEO = 10002;
     private boolean needClearHistory = false;
     private String TAG = "home";
     private LoadingDialog mLoadingDialog;
@@ -96,13 +100,13 @@ public class HomeNewFragment extends BaseMvpFragment{
         //设置WebView属性,能够执行Javascript脚本
         WebSettings webSettings=mWebView.getSettings();
         webSettings.setJavaScriptEnabled(true);
-      //  webSettings.setAllowFileAccess(true);// 设置允许访问文件数据
-        //webSettings.setSupportZoom(true);
-      //  webSettings.setBuiltInZoomControls(true);
-      //  webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
-      //  webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
-      //  webSettings.setDomStorageEnabled(true);
-      //  webSettings.setDatabaseEnabled(true);
+        webSettings.setAllowFileAccess(true);// 设置允许访问文件数据
+        webSettings.setSupportZoom(true); // 允许缩放
+        webSettings.setBuiltInZoomControls(true);
+        //   webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
+        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 不加载缓存内容
+        webSettings.setDomStorageEnabled(true);
+        //   webSettings.setDatabaseEnabled(true);
         webSettings.setUseWideViewPort(true);
 
         //加载需要显示的网页
@@ -190,7 +194,8 @@ public class HomeNewFragment extends BaseMvpFragment{
     }
 
     private void openImageChooserActivity() {
-        final String[] items = new String[] { "相机", "文件" };
+          final String[] items = new String[] { "相机", "录像" , "照片/视频"};
+        // final String[] items = new String[] { "相机", "照片/视频"};
         // 创建对话框构建器
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         // 设置参数
@@ -200,8 +205,10 @@ public class HomeNewFragment extends BaseMvpFragment{
                     public void onClick(DialogInterface dialog, int which) {
                         if (items[which].equals("相机")) {
                             chooseFromCamera();
-                        } else {
+                        } else if(items[which].equals("照片/视频")) {
                             chooseFromFile();
+                        }else {
+                            chooseFromVideo();
                         }
                     }
                 });
@@ -219,14 +226,26 @@ public class HomeNewFragment extends BaseMvpFragment{
     private void chooseFromFile() {
          Intent i = new Intent(Intent.ACTION_GET_CONTENT);
           i.addCategory(Intent.CATEGORY_OPENABLE);
-          i.setType("image/*");
+          i.setType("video/;image/");
           startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
     }
 
+    private void chooseFromVideo() {
+        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
+        //设置视频质量       
+        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
+        //设置视频时长
+        intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
+        //开启摄像机       
+        startActivityForResult(intent, REQUEST_VIDEO);
+
+    }
+
 
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
+        mResultCode = resultCode;
         if (requestCode == FILE_CHOOSER_RESULT_CODE) {
             if (null == uploadMessage && null == uploadMessageAboveL) return;
             Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
@@ -331,4 +350,24 @@ public class HomeNewFragment extends BaseMvpFragment{
         onBackPressed();
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+        // 取消选择时需要回调onReceiveValue,否则网页会挂住,不会再响应点击事件
+        if (mResultCode == Activity.RESULT_CANCELED) {
+            try {
+                if (uploadMessageAboveL != null) {
+                    uploadMessageAboveL.onReceiveValue(null);
+                }
+                if (uploadMessage != null) {
+                    uploadMessage.onReceiveValue(null);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+
+    }
+
 }