Explorar o código

webview上传文件可以选择拍照。

Axion %!s(int64=7) %!d(string=hai) anos
pai
achega
66f4ed570f

+ 111 - 36
app/src/main/java/com/wiipu/peopleheart/cases/CaseFragment.java

@@ -2,7 +2,9 @@ package com.wiipu.peopleheart.cases;
 
 
 import android.annotation.TargetApi;
 import android.annotation.TargetApi;
 import android.app.Activity;
 import android.app.Activity;
+import android.app.AlertDialog;
 import android.content.ClipData;
 import android.content.ClipData;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
 import android.net.Uri;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Build;
@@ -13,16 +15,24 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup;
 import android.webkit.ValueCallback;
 import android.webkit.ValueCallback;
 import android.webkit.WebChromeClient;
 import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import android.webkit.WebViewClient;
 import android.widget.ImageView;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
+import com.lwkandroid.imagepicker.ImagePicker;
+import com.lwkandroid.imagepicker.data.ImageBean;
+import com.lwkandroid.imagepicker.data.ImagePickType;
 import com.wiipu.commonlib.base.BaseMvpFragment;
 import com.wiipu.commonlib.base.BaseMvpFragment;
 import com.wiipu.commonlib.net.HttpClient;
 import com.wiipu.commonlib.net.HttpClient;
+import com.wiipu.commonlib.utils.image.GlideImgLoader;
 import com.wiipu.peopleheart.R;
 import com.wiipu.peopleheart.R;
 
 
+import java.io.File;
+import java.util.List;
+
 import butterknife.BindView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.ButterKnife;
 import butterknife.OnClick;
 import butterknife.OnClick;
@@ -47,6 +57,7 @@ public class CaseFragment extends BaseMvpFragment {
     private ValueCallback<Uri> uploadMessage;
     private ValueCallback<Uri> uploadMessage;
     private ValueCallback<Uri[]> uploadMessageAboveL;
     private ValueCallback<Uri[]> uploadMessageAboveL;
     private final static int FILE_CHOOSER_RESULT_CODE = 10000;
     private final static int FILE_CHOOSER_RESULT_CODE = 10000;
+    private final static int REQUEST_CAMERA = 10001;
     private boolean needClearHistory = false;
     private boolean needClearHistory = false;
     @Override
     @Override
     protected void attach() {
     protected void attach() {
@@ -72,21 +83,66 @@ public class CaseFragment extends BaseMvpFragment {
             needClearHistory = true;
             needClearHistory = true;
         }
         }
     }
     }
+    /*
+        mainWebView.canGoBack()
+        检测浏览器是否可以后退
+        返回bool值
+
+        mainWebView.goBack()
+        浏览器后退
+
+        mainWebView.canGoForwad()
+        检测浏览器是否可以前进
+        返回bool值
+
+        mainWebView.goForward()
+        浏览器前进
+
+        mainWebView.clearCache(true)
+        清除浏览器缓存
+
+        mainWebView.clearFormData()
+        清除浏览器表单数据
+
+        mainWebView.getUrl()
+        获取浏览器网址
+        返回string值
+
+        mainWebView.getTitle()
+        获取浏览器网页标题
+        返回string值
+
+        */
 
 
 
 
     @Override
     @Override
     protected void initViews() {
     protected void initViews() {
         //设置WebView属性,能够执行Javascript脚本
         //设置WebView属性,能够执行Javascript脚本
-        mWebView.getSettings().setJavaScriptEnabled(true);
+        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.setUseWideViewPort(true);
+
+
+
         //加载需要显示的网页
         //加载需要显示的网页
         mWebView.loadUrl(HttpClient.BASE_NET_URL + "weixinMinxin/allHanding_manage.php");
         mWebView.loadUrl(HttpClient.BASE_NET_URL + "weixinMinxin/allHanding_manage.php");
         //设置web视图
         //设置web视图
         //当用户点击了你的WebView中的一个链接,默认的行为是Android启动一个处理URL的应用,通常,默认的浏览器打开并下载目标URL。
         //当用户点击了你的WebView中的一个链接,默认的行为是Android启动一个处理URL的应用,通常,默认的浏览器打开并下载目标URL。
         // 可以在WebView中覆盖这一行为,使得连接仍在WebView中打开。
         // 可以在WebView中覆盖这一行为,使得连接仍在WebView中打开。
+        // mWebView.setWebViewClient(new WebViewClient());
         mWebView.setWebViewClient(new WebViewClient() {
         mWebView.setWebViewClient(new WebViewClient() {
 
 
+
             @Override
             @Override
             public void onPageFinished(WebView view, String url) {
             public void onPageFinished(WebView view, String url) {
+
                 super.onPageFinished(view, url);
                 super.onPageFinished(view, url);
                 String title = view.getTitle();
                 String title = view.getTitle();
                 if (!TextUtils.isEmpty(title)) {
                 if (!TextUtils.isEmpty(title)) {
@@ -100,6 +156,7 @@ public class CaseFragment extends BaseMvpFragment {
 
 
         mWebView.setWebChromeClient(new WebChromeClient(){
         mWebView.setWebChromeClient(new WebChromeClient(){
 
 
+
             // For Android < 3.0
             // For Android < 3.0
             public void openFileChooser(ValueCallback<Uri> valueCallback) {
             public void openFileChooser(ValueCallback<Uri> valueCallback) {
                 uploadMessage = valueCallback;
                 uploadMessage = valueCallback;
@@ -122,7 +179,7 @@ public class CaseFragment extends BaseMvpFragment {
             //For Android >=5.0
             //For Android >=5.0
             @Override
             @Override
             public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
             public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
-               // return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
+                // return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
                 uploadMessageAboveL = filePathCallback;
                 uploadMessageAboveL = filePathCallback;
                 openImageChooserActivity();
                 openImageChooserActivity();
                 return true;
                 return true;
@@ -130,45 +187,44 @@ public class CaseFragment extends BaseMvpFragment {
             }
             }
         });
         });
 
 
-       /*
-        mainWebView.canGoBack()
-        检测浏览器是否可以后退
-        返回bool值
-
-        mainWebView.goBack()
-        浏览器后退
-
-        mainWebView.canGoForwad()
-        检测浏览器是否可以前进
-        返回bool值
 
 
-        mainWebView.goForward()
-        浏览器前进
-
-        mainWebView.clearCache(true)
-        清除浏览器缓存
-
-        mainWebView.clearFormData()
-        清除浏览器表单数据
+    }
 
 
-        mainWebView.getUrl()
-        获取浏览器网址
-        返回string值
+    private void openImageChooserActivity() {
+        final String[] items = new String[] { "相机", "文件" };
+        // 创建对话框构建器
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        // 设置参数
+        builder.setTitle("请选择文件来源:")
+                .setItems(items, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        if (items[which].equals("相机")) {
+                            chooseFromCamera();
+                        } else {
+                            chooseFromFile();
+                        }
+                    }
+                });
+        builder.create().show();
+    }
 
 
-        mainWebView.getTitle()
-        获取浏览器网页标题
-        返回string值
+    private void chooseFromCamera() {
+        new ImagePicker()
+                .pickType(ImagePickType.ONLY_CAMERA)//设置选取类型(拍照、单选、多选)
+                .displayer(new GlideImgLoader())//自定义图片加载器,默认是Glide实现的,可自定义图片加载器
+                .start(this, REQUEST_CAMERA);
 
 
-        */
     }
     }
 
 
-    private void openImageChooserActivity() {
+    private void chooseFromFile() {
         Intent i = new Intent(Intent.ACTION_GET_CONTENT);
         Intent i = new Intent(Intent.ACTION_GET_CONTENT);
         i.addCategory(Intent.CATEGORY_OPENABLE);
         i.addCategory(Intent.CATEGORY_OPENABLE);
         i.setType("image/*");
         i.setType("image/*");
         startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
         startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
-
     }
     }
+
+
     @Override
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         super.onActivityResult(requestCode, resultCode, data);
@@ -181,16 +237,24 @@ public class CaseFragment extends BaseMvpFragment {
                 uploadMessage.onReceiveValue(result);
                 uploadMessage.onReceiveValue(result);
                 uploadMessage = null;
                 uploadMessage = null;
             }
             }
+        } else if (requestCode == REQUEST_CAMERA) {
+
+            if (null == uploadMessage && null == uploadMessageAboveL) return;
+            Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
+            if (uploadMessageAboveL != null) {
+                onActivityResultAboveL(requestCode, resultCode, data);
+            } else if (uploadMessage != null) {
+                uploadMessage.onReceiveValue(result);
+                uploadMessage = null;
+            }
         }
         }
     }
     }
 
 
 
 
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
     private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
-        if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null)
-            return;
         Uri[] results = null;
         Uri[] results = null;
-        if (resultCode == RESULT_OK) {
+        if (resultCode == RESULT_OK && requestCode==FILE_CHOOSER_RESULT_CODE) {
             if (intent != null) {
             if (intent != null) {
                 String dataString = intent.getDataString();
                 String dataString = intent.getDataString();
                 ClipData clipData = intent.getClipData();
                 ClipData clipData = intent.getClipData();
@@ -204,11 +268,22 @@ public class CaseFragment extends BaseMvpFragment {
                 if (dataString != null)
                 if (dataString != null)
                     results = new Uri[]{Uri.parse(dataString)};
                     results = new Uri[]{Uri.parse(dataString)};
             }
             }
+        } else if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {
+            List<ImageBean> resultList = intent.getExtras().getParcelableArrayList(ImagePicker.INTENT_RESULT_DATA);
+            if(resultList != null){
+                String mAvatarPath = resultList.get(0).getImagePath();
+                Uri result = Uri.fromFile(new File(mAvatarPath));
+                results = new Uri[]{result};
+
+            }
         }
         }
-        uploadMessageAboveL.onReceiveValue(results);
-        uploadMessageAboveL = null;
-    }
 
 
+        if (results != null) {
+            uploadMessageAboveL.onReceiveValue(results);
+            uploadMessageAboveL = null;
+        }
+
+    }
 
 
 
 
 
 

+ 108 - 11
app/src/main/java/com/wiipu/peopleheart/home/HomeNewFragment.java

@@ -1,20 +1,45 @@
 package com.wiipu.peopleheart.home;
 package com.wiipu.peopleheart.home;
 
 
 import android.annotation.TargetApi;
 import android.annotation.TargetApi;
+import android.app.AlertDialog;
 import android.content.ClipData;
 import android.content.ClipData;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
+import android.graphics.Bitmap;
 import android.net.Uri;
 import android.net.Uri;
+import android.net.http.SslError;
 import android.os.Build;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Bundle;
+import android.os.Environment;
+import android.os.Message;
+import android.provider.MediaStore;
+import android.support.annotation.Nullable;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.text.TextUtils;
+import android.text.format.DateFormat;
 import android.util.Log;
 import android.util.Log;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup;
+import android.webkit.ClientCertRequest;
+import android.webkit.ConsoleMessage;
+import android.webkit.GeolocationPermissions;
+import android.webkit.HttpAuthHandler;
+import android.webkit.JsPromptResult;
+import android.webkit.JsResult;
+import android.webkit.PermissionRequest;
+import android.webkit.RenderProcessGoneDetail;
+import android.webkit.SafeBrowsingResponse;
+import android.webkit.SslErrorHandler;
 import android.webkit.ValueCallback;
 import android.webkit.ValueCallback;
 import android.webkit.WebChromeClient;
 import android.webkit.WebChromeClient;
+import android.webkit.WebResourceError;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebResourceResponse;
+import android.webkit.WebSettings;
+import android.webkit.WebStorage;
 import android.webkit.WebView;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import android.webkit.WebViewClient;
 import android.widget.Button;
 import android.widget.Button;
@@ -22,13 +47,18 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 import android.widget.TextView;
+import android.widget.Toast;
 
 
 import com.bigkoo.convenientbanner.ConvenientBanner;
 import com.bigkoo.convenientbanner.ConvenientBanner;
 import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;
 import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;
 import com.bigkoo.convenientbanner.listener.OnItemClickListener;
 import com.bigkoo.convenientbanner.listener.OnItemClickListener;
+import com.lwkandroid.imagepicker.ImagePicker;
+import com.lwkandroid.imagepicker.data.ImageBean;
+import com.lwkandroid.imagepicker.data.ImagePickType;
 import com.wiipu.commonlib.base.BaseAdapter;
 import com.wiipu.commonlib.base.BaseAdapter;
 import com.wiipu.commonlib.base.BaseMvpFragment;
 import com.wiipu.commonlib.base.BaseMvpFragment;
 import com.wiipu.commonlib.net.HttpClient;
 import com.wiipu.commonlib.net.HttpClient;
+import com.wiipu.commonlib.utils.image.GlideImgLoader;
 import com.wiipu.peopleheart.R;
 import com.wiipu.peopleheart.R;
 import com.wiipu.peopleheart.home.acticity.commonActivity;
 import com.wiipu.peopleheart.home.acticity.commonActivity;
 import com.wiipu.peopleheart.home.acticity.homeNewsDetailActivity;
 import com.wiipu.peopleheart.home.acticity.homeNewsDetailActivity;
@@ -40,8 +70,11 @@ import com.wiipu.peopleheart.home.response.topNewsResponse;
 import com.wiipu.peopleheart.widget.ClearEditText;
 import com.wiipu.peopleheart.widget.ClearEditText;
 import com.wiipu.peopleheart.widget.convenientBanner.GlideHolderView;
 import com.wiipu.peopleheart.widget.convenientBanner.GlideHolderView;
 
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 import java.util.List;
+import java.util.Locale;
 
 
 import butterknife.BindView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.ButterKnife;
@@ -64,7 +97,9 @@ public class HomeNewFragment extends BaseMvpFragment{
     private ValueCallback<Uri> uploadMessage;
     private ValueCallback<Uri> uploadMessage;
     private ValueCallback<Uri[]> uploadMessageAboveL;
     private ValueCallback<Uri[]> uploadMessageAboveL;
     private final static int FILE_CHOOSER_RESULT_CODE = 10000;
     private final static int FILE_CHOOSER_RESULT_CODE = 10000;
+    private final static int REQUEST_CAMERA = 10001;
     private boolean needClearHistory = false;
     private boolean needClearHistory = false;
+    private String TAG = "home";
 
 
 
 
     @Override
     @Override
@@ -95,7 +130,19 @@ public class HomeNewFragment extends BaseMvpFragment{
     @Override
     @Override
     protected void initViews() {
     protected void initViews() {
         //设置WebView属性,能够执行Javascript脚本
         //设置WebView属性,能够执行Javascript脚本
-        mWebView.getSettings().setJavaScriptEnabled(true);
+        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.setUseWideViewPort(true);
+
+
+
         //加载需要显示的网页
         //加载需要显示的网页
         mWebView.loadUrl(HttpClient.BASE_NET_URL + "weixinMinxin/app_index.php");
         mWebView.loadUrl(HttpClient.BASE_NET_URL + "weixinMinxin/app_index.php");
         //设置web视图
         //设置web视图
@@ -104,8 +151,10 @@ public class HomeNewFragment extends BaseMvpFragment{
        // mWebView.setWebViewClient(new WebViewClient());
        // mWebView.setWebViewClient(new WebViewClient());
         mWebView.setWebViewClient(new WebViewClient() {
         mWebView.setWebViewClient(new WebViewClient() {
 
 
+
             @Override
             @Override
             public void onPageFinished(WebView view, String url) {
             public void onPageFinished(WebView view, String url) {
+
                 super.onPageFinished(view, url);
                 super.onPageFinished(view, url);
                 String title = view.getTitle();
                 String title = view.getTitle();
                 if (!TextUtils.isEmpty(title)) {
                 if (!TextUtils.isEmpty(title)) {
@@ -118,7 +167,7 @@ public class HomeNewFragment extends BaseMvpFragment{
         });
         });
 
 
         mWebView.setWebChromeClient(new WebChromeClient(){
         mWebView.setWebChromeClient(new WebChromeClient(){
-
+            
             // For Android < 3.0
             // For Android < 3.0
             public void openFileChooser(ValueCallback<Uri> valueCallback) {
             public void openFileChooser(ValueCallback<Uri> valueCallback) {
                 uploadMessage = valueCallback;
                 uploadMessage = valueCallback;
@@ -153,12 +202,40 @@ public class HomeNewFragment extends BaseMvpFragment{
     }
     }
 
 
     private void openImageChooserActivity() {
     private void openImageChooserActivity() {
-        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
-        i.addCategory(Intent.CATEGORY_OPENABLE);
-        i.setType("image/*");
-        startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
+        final String[] items = new String[] { "相机", "文件" };
+        // 创建对话框构建器
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        // 设置参数
+        builder.setTitle("请选择文件来源:")
+                .setItems(items, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        if (items[which].equals("相机")) {
+                            chooseFromCamera();
+                        } else {
+                            chooseFromFile();
+                        }
+                    }
+                });
+        builder.create().show();
+    }
+
+    private void chooseFromCamera() {
+        new ImagePicker()
+                .pickType(ImagePickType.ONLY_CAMERA)//设置选取类型(拍照、单选、多选)
+                .displayer(new GlideImgLoader())//自定义图片加载器,默认是Glide实现的,可自定义图片加载器
+                .start(this, REQUEST_CAMERA);
+
+    }
 
 
+    private void chooseFromFile() {
+         Intent i = new Intent(Intent.ACTION_GET_CONTENT);
+          i.addCategory(Intent.CATEGORY_OPENABLE);
+          i.setType("image/*");
+          startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
     }
     }
+
+
     @Override
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         super.onActivityResult(requestCode, resultCode, data);
@@ -171,16 +248,24 @@ public class HomeNewFragment extends BaseMvpFragment{
                 uploadMessage.onReceiveValue(result);
                 uploadMessage.onReceiveValue(result);
                 uploadMessage = null;
                 uploadMessage = null;
             }
             }
+        } else if (requestCode == REQUEST_CAMERA) {
+
+            if (null == uploadMessage && null == uploadMessageAboveL) return;
+            Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
+            if (uploadMessageAboveL != null) {
+                onActivityResultAboveL(requestCode, resultCode, data);
+            } else if (uploadMessage != null) {
+                uploadMessage.onReceiveValue(result);
+                uploadMessage = null;
+            }
         }
         }
     }
     }
 
 
 
 
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
     private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
-        if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null)
-            return;
         Uri[] results = null;
         Uri[] results = null;
-        if (resultCode == RESULT_OK) {
+        if (resultCode == RESULT_OK && requestCode==FILE_CHOOSER_RESULT_CODE) {
             if (intent != null) {
             if (intent != null) {
                 String dataString = intent.getDataString();
                 String dataString = intent.getDataString();
                 ClipData clipData = intent.getClipData();
                 ClipData clipData = intent.getClipData();
@@ -194,9 +279,21 @@ public class HomeNewFragment extends BaseMvpFragment{
                 if (dataString != null)
                 if (dataString != null)
                     results = new Uri[]{Uri.parse(dataString)};
                     results = new Uri[]{Uri.parse(dataString)};
             }
             }
+        } else if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {
+            List<ImageBean> resultList = intent.getExtras().getParcelableArrayList(ImagePicker.INTENT_RESULT_DATA);
+            if(resultList != null){
+                String mAvatarPath = resultList.get(0).getImagePath();
+                Uri result = Uri.fromFile(new File(mAvatarPath));
+                results = new Uri[]{result};
+
+            }
         }
         }
-        uploadMessageAboveL.onReceiveValue(results);
-        uploadMessageAboveL = null;
+
+        if (results != null) {
+            uploadMessageAboveL.onReceiveValue(results);
+            uploadMessageAboveL = null;
+        }
+
     }
     }
 
 
 
 

+ 85 - 11
app/src/main/java/com/wiipu/peopleheart/info/InfoFragment.java

@@ -1,7 +1,9 @@
 package com.wiipu.peopleheart.info;
 package com.wiipu.peopleheart.info;
 
 
 import android.annotation.TargetApi;
 import android.annotation.TargetApi;
+import android.app.AlertDialog;
 import android.content.ClipData;
 import android.content.ClipData;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.Intent;
 import android.net.Uri;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Build;
@@ -13,16 +15,24 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup;
 import android.webkit.ValueCallback;
 import android.webkit.ValueCallback;
 import android.webkit.WebChromeClient;
 import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
 import android.webkit.WebView;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 import android.webkit.WebViewClient;
 import android.widget.ImageView;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
+import com.lwkandroid.imagepicker.ImagePicker;
+import com.lwkandroid.imagepicker.data.ImageBean;
+import com.lwkandroid.imagepicker.data.ImagePickType;
 import com.wiipu.commonlib.base.BaseMvpFragment;
 import com.wiipu.commonlib.base.BaseMvpFragment;
 import com.wiipu.commonlib.net.HttpClient;
 import com.wiipu.commonlib.net.HttpClient;
+import com.wiipu.commonlib.utils.image.GlideImgLoader;
 import com.wiipu.peopleheart.R;
 import com.wiipu.peopleheart.R;
 
 
+import java.io.File;
+import java.util.List;
+
 import butterknife.BindView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.ButterKnife;
 import butterknife.OnClick;
 import butterknife.OnClick;
@@ -47,6 +57,7 @@ public class InfoFragment extends BaseMvpFragment {
     private ValueCallback<Uri> uploadMessage;
     private ValueCallback<Uri> uploadMessage;
     private ValueCallback<Uri[]> uploadMessageAboveL;
     private ValueCallback<Uri[]> uploadMessageAboveL;
     private final static int FILE_CHOOSER_RESULT_CODE = 10000;
     private final static int FILE_CHOOSER_RESULT_CODE = 10000;
+    private final static int REQUEST_CAMERA = 10001;
     private boolean needClearHistory = false;
     private boolean needClearHistory = false;
 
 
     @Override
     @Override
@@ -73,19 +84,34 @@ public class InfoFragment extends BaseMvpFragment {
         }
         }
     }
     }
 
 
-
     @Override
     @Override
     protected void initViews() {
     protected void initViews() {
         //设置WebView属性,能够执行Javascript脚本
         //设置WebView属性,能够执行Javascript脚本
-        mWebView.getSettings().setJavaScriptEnabled(true);
+        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.setUseWideViewPort(true);
+
+
+
         //加载需要显示的网页
         //加载需要显示的网页
         mWebView.loadUrl(HttpClient.BASE_NET_URL + "weixinMinxin/policyNews.php");
         mWebView.loadUrl(HttpClient.BASE_NET_URL + "weixinMinxin/policyNews.php");
         //设置web视图
         //设置web视图
         //当用户点击了你的WebView中的一个链接,默认的行为是Android启动一个处理URL的应用,通常,默认的浏览器打开并下载目标URL。
         //当用户点击了你的WebView中的一个链接,默认的行为是Android启动一个处理URL的应用,通常,默认的浏览器打开并下载目标URL。
         // 可以在WebView中覆盖这一行为,使得连接仍在WebView中打开。
         // 可以在WebView中覆盖这一行为,使得连接仍在WebView中打开。
-         mWebView.setWebViewClient(new WebViewClient() {
+        // mWebView.setWebViewClient(new WebViewClient());
+        mWebView.setWebViewClient(new WebViewClient() {
+
+
             @Override
             @Override
             public void onPageFinished(WebView view, String url) {
             public void onPageFinished(WebView view, String url) {
+
                 super.onPageFinished(view, url);
                 super.onPageFinished(view, url);
                 String title = view.getTitle();
                 String title = view.getTitle();
                 if (!TextUtils.isEmpty(title)) {
                 if (!TextUtils.isEmpty(title)) {
@@ -93,13 +119,13 @@ public class InfoFragment extends BaseMvpFragment {
                 }
                 }
                 if (needClearHistory) {
                 if (needClearHistory) {
                     mWebView.clearHistory();
                     mWebView.clearHistory();
-                    needClearHistory = false;
                 }
                 }
-
             }
             }
         });
         });
+
         mWebView.setWebChromeClient(new WebChromeClient(){
         mWebView.setWebChromeClient(new WebChromeClient(){
 
 
+
             // For Android < 3.0
             // For Android < 3.0
             public void openFileChooser(ValueCallback<Uri> valueCallback) {
             public void openFileChooser(ValueCallback<Uri> valueCallback) {
                 uploadMessage = valueCallback;
                 uploadMessage = valueCallback;
@@ -134,12 +160,40 @@ public class InfoFragment extends BaseMvpFragment {
     }
     }
 
 
     private void openImageChooserActivity() {
     private void openImageChooserActivity() {
+        final String[] items = new String[] { "相机", "文件" };
+        // 创建对话框构建器
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        // 设置参数
+        builder.setTitle("请选择文件来源:")
+                .setItems(items, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        if (items[which].equals("相机")) {
+                            chooseFromCamera();
+                        } else {
+                            chooseFromFile();
+                        }
+                    }
+                });
+        builder.create().show();
+    }
+
+    private void chooseFromCamera() {
+        new ImagePicker()
+                .pickType(ImagePickType.ONLY_CAMERA)//设置选取类型(拍照、单选、多选)
+                .displayer(new GlideImgLoader())//自定义图片加载器,默认是Glide实现的,可自定义图片加载器
+                .start(this, REQUEST_CAMERA);
+
+    }
+
+    private void chooseFromFile() {
         Intent i = new Intent(Intent.ACTION_GET_CONTENT);
         Intent i = new Intent(Intent.ACTION_GET_CONTENT);
         i.addCategory(Intent.CATEGORY_OPENABLE);
         i.addCategory(Intent.CATEGORY_OPENABLE);
         i.setType("image/*");
         i.setType("image/*");
         startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
         startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
-
     }
     }
+
+
     @Override
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         super.onActivityResult(requestCode, resultCode, data);
@@ -152,16 +206,24 @@ public class InfoFragment extends BaseMvpFragment {
                 uploadMessage.onReceiveValue(result);
                 uploadMessage.onReceiveValue(result);
                 uploadMessage = null;
                 uploadMessage = null;
             }
             }
+        } else if (requestCode == REQUEST_CAMERA) {
+
+            if (null == uploadMessage && null == uploadMessageAboveL) return;
+            Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
+            if (uploadMessageAboveL != null) {
+                onActivityResultAboveL(requestCode, resultCode, data);
+            } else if (uploadMessage != null) {
+                uploadMessage.onReceiveValue(result);
+                uploadMessage = null;
+            }
         }
         }
     }
     }
 
 
 
 
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
     private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
     private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
-        if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null)
-            return;
         Uri[] results = null;
         Uri[] results = null;
-        if (resultCode == RESULT_OK) {
+        if (resultCode == RESULT_OK && requestCode==FILE_CHOOSER_RESULT_CODE) {
             if (intent != null) {
             if (intent != null) {
                 String dataString = intent.getDataString();
                 String dataString = intent.getDataString();
                 ClipData clipData = intent.getClipData();
                 ClipData clipData = intent.getClipData();
@@ -175,9 +237,21 @@ public class InfoFragment extends BaseMvpFragment {
                 if (dataString != null)
                 if (dataString != null)
                     results = new Uri[]{Uri.parse(dataString)};
                     results = new Uri[]{Uri.parse(dataString)};
             }
             }
+        } else if (requestCode == REQUEST_CAMERA && resultCode == RESULT_OK) {
+            List<ImageBean> resultList = intent.getExtras().getParcelableArrayList(ImagePicker.INTENT_RESULT_DATA);
+            if(resultList != null){
+                String mAvatarPath = resultList.get(0).getImagePath();
+                Uri result = Uri.fromFile(new File(mAvatarPath));
+                results = new Uri[]{result};
+
+            }
+        }
+
+        if (results != null) {
+            uploadMessageAboveL.onReceiveValue(results);
+            uploadMessageAboveL = null;
         }
         }
-        uploadMessageAboveL.onReceiveValue(results);
-        uploadMessageAboveL = null;
+
     }
     }