精华内容
下载资源
问答
  • webview打开相册
    2021-05-14 15:07:02

    前言

    之前有过这个需求,但是好久没写了 忘了 这次算是一个记录吧 也写给迷茫中的你

    之前我记得ios是可以直接打开的 但是Android不行 也是找了很多资料 经过不懈的努力 终于终于终于。。。嗯 呦西

     

    1.了解类型

    image 图片类型

    video 视频类型

    */* 包含以上俩种

     

    2.上代码

    private ValueCallback<Uri> mUploadMessage;
    private ValueCallback<Uri[]> mUploadCallbackAboveL;
    private final static int FILECHOOSER_RESULTCODE = 101;

    在WebView展示页面 创建 

    WebChromeClient 对象
    private final WebChromeClient mWebViewClient = new WebChromeClient() {
    
        @Override
        public void openFileChooser(ValueCallback<Uri> valueCallback, String s, String s1) {
            //Log.d(TAG, "openFileChoose(ValueCallback<Uri> uploadMsg, String acceptType, String capture)");
            mUploadMessage = valueCallback;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            //如果选择图片就image 视频就video
            i.setType("*/*");
            CustomerServiceWebViewActivity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),
                    FILECHOOSER_RESULTCODE);
    
        }
    };

    重写 openFileChooser方法 

    接收结果

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == FILECHOOSER_RESULTCODE) {
            if (null == mUploadMessage && null == mUploadCallbackAboveL) return;
            Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
            if (mUploadCallbackAboveL != null) {
                onActivityResultAboveL(requestCode, resultCode, data);
            } else if (mUploadMessage != null) {
                mUploadMessage.onReceiveValue(result);
                mUploadMessage = null;
            }
        }
    }

    选择多张图片

    private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) {
        if (requestCode != FILECHOOSER_RESULTCODE
                || mUploadCallbackAboveL == null) {
            return;
        }
        Uri[] results = null;
        if (resultCode == Activity.RESULT_OK) {
            if (data == null) {
            } else {
                String dataString = data.getDataString();
                ClipData clipData = data.getClipData();
                if (clipData != null) {
                    results = new Uri[clipData.getItemCount()];
                    for (int i = 0; i < clipData.getItemCount(); i++) {
                        ClipData.Item item = clipData.getItemAt(i);
                        results[i] = item.getUri();
                        //Log.e(TAG, "onActivityResultAboveL: " + results[i].getPath());
                    }
                }
                if (dataString != null)
                    results = new Uri[]{Uri.parse(dataString)};
                //Log.e(TAG, "onActivityResultAboveL: " + results.length);
            }
        }
        mUploadCallbackAboveL.onReceiveValue(results);
        mUploadCallbackAboveL = null;
        return;
    }

    最后把WebChromeClient设置给WebView

    mWebView.setWebChromeClient(mWebViewClient);

     

    结束。

     

    更多相关内容
  • Android webview打开相册选择图片并上传到服务器,(亲测可用)
  • package cn.hellomrhuang.webapp.webview;import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content....
    package cn.hellomrhuang.webapp.webview;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Build;
    import android.provider.MediaStore;
    import android.support.annotation.RequiresApi;
    import android.util.Log;
    import android.webkit.GeolocationPermissions;
    import android.webkit.JsResult;
    import android.webkit.ValueCallback;
    import android.webkit.WebChromeClient;
    import android.webkit.WebSettings;
    import android.webkit.WebStorage;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    
    import cn.hellomrhuang.webapp.R;
    
    
    /**
     * Created by bao on 2017/3/3.
     */
    
    public class WebViewHelper {
    
        private static final int FILECHOOSER_RESULTCODE_5 = 12;
        private static final int FILECHOOSER_RESULTCODE = 13;
        private WebChromeClient.FileChooserParams  mfileChooserParams;
        ValueCallback<Uri[]> umUploadMessages;
        ValueCallback<Uri> mUploadMessage;
        private Activity mact;
    
        private WebView mWebView;
        private HelperWebViewClient listener;
    
        public WebViewHelper(Activity activity) {
            mact = activity;
        }
    
        public WebViewHelper(Activity activity, WebView webView) {
            mact = activity;
            mWebView = webView;
        }
    
    
        public void setWebViewClient(HelperWebViewClient listener) {
            this.listener = listener;
        }
    
        @SuppressLint("SetJavaScriptEnabled")
        public void init(String url) {
            if(mWebView== null){
                mWebView = (WebView) mact.findViewById(R.id.webView);
            }
    
    
            mWebView.loadUrl(url);
    
            WebSettings webSettings = mWebView.getSettings();
    
    
    
            webSettings.setJavaScriptEnabled(true);
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
            // 启用数据库
            webSettings.setDatabaseEnabled(true);
            String dir = mact.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
            // 使用localStorage则必须打开
            webSettings.setDomStorageEnabled(true);
            // 启用地理定位
            webSettings.setGeolocationEnabled(true);
            // 设置定位的数据库路径
            webSettings.setGeolocationDatabasePath(dir);
            // 开启应用程序缓存
            webSettings.setAppCacheEnabled(true);
            String diri = mact.getApplicationContext().getDir("cache", Context.MODE_PRIVATE).getPath();
            // 设置应用缓存的路径
            webSettings.setAppCachePath(diri);
            // 设置缓存的模式
            webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
            webSettings.setAllowFileAccess(true);
            webSettings.setAllowContentAccess(true);
            webSettings.setLoadsImagesAutomatically(true);
            //用WebView显示图片,可使用这个参数 设置网页布局类型
            webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
            webSettings.setSupportZoom(false);// 支持缩放
            webSettings.setBuiltInZoomControls(false);// 缩放控件
    
            // 设置WebViewClient
            mWebView.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
    
                    if (listener != null) {
                        listener.onReceivedTitle(view, url);
                    }
                    view.loadUrl(url);
                    return true;
                }
    
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
    
    
                }
    
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
    
    
                    //dialog.show();
                }
    
                @Override
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    // TODO Auto-generated method stub
                    super.onReceivedError(view, errorCode, description, failingUrl);
    
    
                }
    
                public void onConsoleMessage(String message, int lineNumber, String sourceID) {
                    Log.d("MyApplication", message + " -- From line " + lineNumber + " of " + sourceID);
    
                }
            });
    
            // 设置WebChromeClient
            mWebView.setWebChromeClient(new WebChromeClient() {
    
    
                // 扩充缓存的容量
                public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,
                                                     WebStorage.QuotaUpdater quotaUpdater) {
                    quotaUpdater.updateQuota(spaceNeeded * 2);
                }
    
                // 配置权限(同样在WebChromeClient中实现)
                public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                    callback.invoke(origin, true, false);
                    super.onGeolocationPermissionsShowPrompt(origin, callback);
                }
    
                // 扩充数据库的容量(在WebChromeClinet中实现)
                public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota,
                                                    long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
                    quotaUpdater.updateQuota(estimatedSize * 2);
                }
    
                // 处理javascript中的alert
                public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                    // 构建一个Builder来显示网页中的对话框
                    AlertDialog.Builder builder = new AlertDialog.Builder(mact);
                    builder.setTitle("Alert");
                    builder.setMessage(message);
                    builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            result.confirm();
                        }
                    });
                    builder.setCancelable(false);
                    builder.create();
                    builder.show();
                    return true;
                }
    
    
    
                // 处理javascript中的confirm
                public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(mact);
                    builder.setTitle("confirm");
                    builder.setMessage(message);
                    builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            result.confirm();
                        }
                    });
                    builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            result.cancel();
                        }
                    });
                    builder.setCancelable(false);
                    builder.create();
                    builder.show();
                    return true;
                }
                @Override
                public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
    
                    umUploadMessages = filePathCallback;
                    mfileChooserParams = fileChooserParams;
                    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                    i.addCategory(Intent.CATEGORY_OPENABLE);
                    i.putExtra("return-data", true);
                    i.setType("image/*");
                    i.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            "image/*");
                    mact.startActivityForResult(Intent.createChooser(i, "选择相册"),
                            FILECHOOSER_RESULTCODE_5);
                    return true;
                }
    
                // 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.putExtra("return-data", true);
                    i.setType("image/*");
                    i.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            "image/*");
    
                    mact.startActivityForResult(Intent.createChooser(i, "选择相册"),
                            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.putExtra("return-data", true);
                    i.setType("image/*");
                    i.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            "image/*");
                    mact.startActivityForResult(Intent.createChooser(i, "选择相册"),
                            FILECHOOSER_RESULTCODE);
                }
    
                // Andorid 3.0 +
                public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
                    mUploadMessage = uploadMsg;
                    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                    i.addCategory(Intent.CATEGORY_OPENABLE);
                    i.putExtra("return-data", true);
                    i.setType("image/*");
                    i.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            "image/*");
                    mact.startActivityForResult(Intent.createChooser(i, "选择相册"),
                            FILECHOOSER_RESULTCODE);
                }
    
    
    
                @Override
                // 设置网页加载的进度条
                public void onProgressChanged(WebView view, int newProgress) {
                    super.onProgressChanged(view, newProgress);
                    Log.i("aaa", newProgress + "");
                    if (listener != null) {
                        listener.onProgressChanged(view, newProgress);
                    }
    
    
                }
    
                // 设置应用程序的标题title
                public void onReceivedTitle(WebView view, String title) {
                    super.onReceivedTitle(view, title);
    
                    if (listener != null) {
                        listener.onReceivedTitle(view, title);
                    }
                }
            });
    
        }
    
    
        public void goBack() {
          if (mWebView.canGoBack()) {
                mWebView.goBack();
    
            } else {
                mact.finish();
            }
        }
    
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == FILECHOOSER_RESULTCODE) {
                if (null == mUploadMessage) return;
                if (null == data){
                    mUploadMessage.onReceiveValue(null);
                    mUploadMessage = null;
                }else{
                    Uri result = data == null || resultCode != Activity.RESULT_OK ? null
                            : data.getData();
                    mUploadMessage.onReceiveValue(result);
                    mUploadMessage = null;
                }
            }else  if (requestCode == FILECHOOSER_RESULTCODE_5){// 5.0适配,主要是因为5.0的返回参数不同。
                // 处理5.0的callback
                if (umUploadMessages != null) {
                    if (null != data) {
    // 5.0的处理方式不同,要注意。
                        ArrayList<String> resultList = data
                                .getStringArrayListExtra("data");
    
                        umUploadMessages.onReceiveValue(
                                mfileChooserParams.parseResult(resultCode, data));
                        umUploadMessages = null;
                    } else {
                        umUploadMessages.onReceiveValue(null);
                    }
                }
            }
        }
    
        public interface HelperWebViewClient {
            void onReceivedTitle(WebView view, String title);
    
            void onProgressChanged(WebView view, int newProgress);
    
            void shouldOverrideUrlLoading(WebView view, String url);
        }
    }
    
    展开全文
  • Android中使用WebView调用系统相机和相册,但是4.4的手机不能使用
  • 安卓 webview 调用相机相册上传文件 ,适配适配手机 添加权限
  • 本文实例为大家分享了Android WebView调用本地相册的具体实现方法,供大家参考,具体内容如下首先要知道android本身的WebView是并不支持调用手机文件并上传的,其次WebView的内核在android每次更新的时候都是不太...

    本文实例为大家分享了Android WebView调用本地相册的具体实现方法,供大家参考,具体内容如下

    首先要知道android本身的WebView是并不支持调用手机文件并上传的,其次WebView的内核在android每次更新的时候都是不太一样的,也是够坑爹的;不过需求又不能改,H5需要调用系统相册,还好最后还是找到方法解决了,就是要重写里面的一个方法,不过这种情况也是在5.0之前有效,5.0之后就需要重写另外的一个方法,先将这些方法一个个的列出

    注意在这里我们需要重写的方法是在这个WebChromeClient类里面的;

    private ValueCallback mUploadMessage;

    private ValueCallback mUploadCallbackAboveL;

    private final static int FILECHOOSER_RESULTCODE = 101;

    当我们是5.0以下的话,用的是以下三个方法:

    public void openFileChooser(ValueCallback uploadMsg) {

    Log.d(TAG, "openFileChoose(ValueCallback uploadMsg)");

    mUploadMessage = uploadMsg;

    Intent i = new Intent(Intent.ACTION_GET_CONTENT);

    i.addCategory(Intent.CATEGORY_OPENABLE);

    i.setType("image/*");

    Html5Activity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"),

    FILECHOOSER_RESULTCODE);

    }

    public void openFileChooser(ValueCallback uploadMsg, String acceptType) {

    Log.d(TAG, "openFileChoose( ValueCallback uploadMsg, String acceptType )");

    mUploadMessage = uploadMsg;

    Intent i = new Intent(Intent.ACTION_GET_CONTENT);

    i.addCategory(Intent.CATEGORY_OPENABLE);

    i.setType("image/*");

    Html5Activity.this.startActivityForResult(

    Intent.createChooser(i, "File Browser"),

    FILECHOOSER_RESULTCODE);

    }

    public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {

    Log.d(TAG, "openFileChoose(ValueCallback uploadMsg, String acceptType, String capture)");

    mUploadMessage = uploadMsg;

    Intent i = new Intent(Intent.ACTION_GET_CONTENT);

    i.addCategory(Intent.CATEGORY_OPENABLE);

    i.setType("image/*");

    Html5Activity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),

    FILECHOOSER_RESULTCODE);

    }

    值得注意的是这三种方法都是一样的,只是在不同版本下会分别调用,还有就是这个方法是重写这个WebChromeClient类里面的,别以为是我们随便写的,只是google不希望我们重写这个方法罢了,不过5.0之后就又不一样了,需要重写的是下面的这个方法:

    @Override

    public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {

    mUploadCallbackAboveL = filePathCallback;

    Intent i = new Intent(Intent.ACTION_GET_CONTENT);

    i.addCategory(Intent.CATEGORY_OPENABLE);

    i.setType("image/*");

    Html5Activity.this.startActivityForResult(

    Intent.createChooser(i, "File Browser"),

    FILECHOOSER_RESULTCODE);

    return true;

    }

    好了,到了这一步我们的调用已经ok了,但还有一个需要的过程;跟我们普通的回调接收是一模一样的:

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == FILECHOOSER_RESULTCODE) {

    if (null == mUploadMessage && null == mUploadCallbackAboveL) return;

    Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();

    if (mUploadCallbackAboveL != null) {

    onActivityResultAboveL(requestCode, resultCode, data);

    } else if (mUploadMessage != null) {

    mUploadMessage.onReceiveValue(result);

    mUploadMessage = null;

    }

    }

    }

    当然还有一个是让我们在5.0的情况下用的:

    private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) {

    if (requestCode != FILECHOOSER_RESULTCODE

    || mUploadCallbackAboveL == null) {

    return;

    }

    Uri[] results = null;

    if (resultCode == Activity.RESULT_OK) {

    if (data == null) {

    } else {

    String dataString = data.getDataString();

    ClipData clipData = data.getClipData();

    if (clipData != null) {

    results = new Uri[clipData.getItemCount()];

    for (int i = 0; i < clipData.getItemCount(); i++) {

    ClipData.Item item = clipData.getItemAt(i);

    results[i] = item.getUri();

    Log.e(TAG, "onActivityResultAboveL: " + results[i].getPath());

    }

    }

    if (dataString != null)

    results = new Uri[]{Uri.parse(dataString)};

    Log.e(TAG, "onActivityResultAboveL: " + results.length);

    }

    }

    mUploadCallbackAboveL.onReceiveValue(results);

    mUploadCallbackAboveL = null;

    return;

    }

    到这一步H5基本就可以正常的调用手机的相册了。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • webview上传,自己写的,有点混乱。亲测在谷歌原生模拟器中可运行,实体机选择的是小米也可运行,其他的不知道是否可行。如有错误,希望有能力的朋友帮忙能修改代码,感激不尽~
  •  FileChooserParams fileChooserParams) 这里有个漏洞,4.4.x的由于系统内核发生了改变,没法调用以上方法,现在仍然找不到解决办法,唯一的方法就是4.4直接使用手机浏览器打开,这个是可以的。 那下面具体的贴下...

    2966591fe80e1a10e2cc1e74d9babd7e.png0e3ea6bd97d7c2dd9d5683a911f062c5.png

    一般在项目中与js交互,可能会遇到上传文件图片等操作,避免不了一些坑,下面简单说一下,

    public void openFileChooser(ValueCallback uploadMsg)

    3.0以上:

    public void openFileChooser(ValueCallback uploadMsg, String acceptType)

    4.4以下:

    public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture)

    5.0以上:

    public boolean onShowFileChooser(WebView mWebView, ValueCallback filePathCallback, FileChooserParams fileChooserParams)

    这里有个漏洞,4.4.x的由于系统内核发生了改变,没法调用以上方法,现在仍然找不到解决办法,唯一的方法就是4.4直接使用手机浏览器打开,这个是可以的。

    那下面具体的贴下代码:

    继承自WebChromeClient,重写

    //3.0++

    public void openFileChooser(ValueCallback uploadMsg, String acceptType) {

    openFileChooserImpl(uploadMsg);

    }

    //3.0--

    public void openFileChooser(ValueCallback uploadMsg) {

    openFileChooserImpl(uploadMsg);

    }

    //4.1

    public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {

    openFileChooserImpl(uploadMsg);

    }

    @Override

    public boolean onShowFileChooser(WebView mWebView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {

    openFileChooserImplForAndroid5(filePathCallback);

    return true;

    }

    外层定义接收返回值:

    private ValueCallback mUploadMessage;

    private ValueCallback mUploadCallbackAboveL;

    不同的版本调不同的方法:

    private void openFileChooserImplForAndroid5(ValueCallback uploadMsg) {

    mUploadCallbackAboveL = uploadMsg;

    dispatchTakePictureIntent();

    }

    //5.0以下的掉用

    private void openFileChooserImpl(ValueCallback uploadMsg) {

    mUploadMessage = uploadMsg;

    dispatchTakePictureIntent();

    }

    //拍照

    private void dispatchTakePictureIntent() {

    selectImgDialog();

    }

    我下面就把代码全部贴出来吧:

    private void takePhoto() {

    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {

    Uri imageUri = null;

    try {

    imageUri = Uri.fromFile(createImageFile());

    } catch (IOException e) {

    e.printStackTrace();

    }

    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

    startActivityForResult(takePictureIntent, FILECHOOSER_RESULTCODE);

    }

    }

    /*** 209.* 本地相册选择图片* 210.*/ private void chosePic() {

    Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT);

    String IMAGE_UNSPECIFIED = "image/*";

    innerIntent.setType(IMAGE_UNSPECIFIED); // 查看类型

    Intent wrapperIntent = Intent.createChooser(innerIntent, null);

    startActivityForResult(wrapperIntent, REQ_CHOOSE);

    }

    String mCurrentPhotoPath = null;

    String FileName = "forum";

    //创建文件夹包装图片

    private File createImageFile() throws IOException {

    File storageDir = new File(Util.getAppPath(getActivity()) + FileName);

    if (!storageDir.exists()) {

    storageDir.mkdirs();

    }

    storageDir = new File(Util.getAppPath(getActivity()) + FileName + "/", System.currentTimeMillis() + ".jpg");

    //保存当前图片路径

    mCurrentPhotoPath = storageDir.getAbsolutePath();

    return storageDir;

    }

    //onActivityResult回调

    @Override

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == FILECHOOSER_RESULTCODE|| requestCode == REQ_CHOOSE) {

    if (null == mUploadMessage && null == mUploadCallbackAboveL) return;

    Uri result = data == null || resultCode != RESULT_OK? null : data.getData();

    if (mUploadCallbackAboveL != null) {

    onActivityResultAboveL(requestCode, data);

    } else if (mUploadMessage != null) {

    mUploadMessage.onReceiveValue(result);

    mUploadMessage = null;

    }

    }

    }

    //5.0以上版本,由于api不一样,要单独处理

    // @TargetApi(Build.VERSION_CODES.LOLLIPOP)

    private void onActivityResultAboveL(int requestCode, Intent data) {

    if (mUploadCallbackAboveL == null) {

    return;

    }

    Uri result = null;

    if (requestCode == FILECHOOSER_RESULTCODE) {

    File file = new File(mCurrentPhotoPath);

    Uri localUri = Uri.fromFile(file);

    Intent localIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, localUri);

    getActivity().sendBroadcast(localIntent);

    result = Uri.fromFile(file);

    } else if (requestCode == REQ_CHOOSE) {

    result = data.getData();

    }

    mUploadCallbackAboveL.onReceiveValue(new Uri[]{result});

    mUploadCallbackAboveL = null;

    return;

    }

    后补的代码:

    private void openFileChooserImplForAndroid5(ValueCallback uploadMsg) {

    mUploadCallbackAboveL = uploadMsg;

    dispatchTakePictureIntent();

    }

    //5.0以下的掉用

    private void openFileChooserImpl(ValueCallback uploadMsg) {

    mUploadMessage = uploadMsg;

    dispatchTakePictureIntent();

    }

    基本代码就是以上这些,selectImgDialog()方法是弹窗提示选择,关于这个弹窗布局的用法,之前写的一篇文章说的很清楚了(BottomSheet 的详解及注意事项),有疑问的欢迎提问。

    展开全文
  • 也是相当无奈,目前发现了好多android端与ios端webView的异同。android端与ios确的不同大致包括:1:android不能直接打开html的下载文件,需要先下载保存本地在打开本地文件2:android不能直接打开pdf文件,同样要...
  • 本文示例代码可在微信公众号「01二进制」后台回复「WebView」查看下载前言我们知道在开发 Native App 时经常会有打开网页的需求,可供的选择通常只有两种:在 App 内部打开网页通过调用系统自带浏览器打开网页以「...
  • Webview打开本地图片选择器十分之麻烦,其在安卓系统3x 4x 5x上的行为都不同,处理也不同,所以之前差点崩溃。经过测试和完善,最终其在各个版本上都能完美工作。 直接上代码 package com.testandroid.webview; ...
  • 记录在Android的webview加载的h5中调用相机和选择相册的步骤1申请权限此时需要申请相机和相册的权限(1)android.Manifest.permission.CAMERA)(2)android.Manifest.permission.READ_EXTERNAL_STORAGEprivate void get...
  • readme有说明...
  • 这个资源是从网上下载来的,不过经过本人改造,目前适合高版本android使用,经测试完全没有,可以直接在android studio 3.0上运行。 这个是一个非常简易的webview调用相机拍照和预览的demo,希望能帮助到需要的人。
  • 长话短说,我们Android手机通过WebView打开H5页面。如果网页需要打开手机相册选取图片,不做任何处理的话是不可以选取的。我们需要重写WebChromeClient类的部分方法 第一步,重写方法(WebChromeClient类中的) 几个...
  • webview的setWebChromeClient方法调用手机端的拍照和相册选择功能并上传,代码简洁明了
  • 主要内容使用WebView加载网络图片WebView加载图片的点击事件系统的ImageView控件本就是用来显示图片的,那为什么还使用WebView控件去显示呢?原因有三:我目前项目的图片大小不一,有的很大(22561080),有的很小(3636...
  • 实现在WebView点击打开手机相册功能

    千次阅读 2018-03-26 15:22:06
    那在WebView打开相册的功能是要怎样实现呢? 答案就是在webview.setWebChromeClient()中实现openFileChooser()方法,具体代码如下: webView.setWebChromeClient(new WebChromeClient() { @Override ...
  • 1.app在Windows.rootViewController 下(rootViewController是一个NavigationController)push一个带WebView的Controller,WebView打开网页有一个调用系统相册的页面,这个时候可以正常调用。 2.app在Windows....
  • 记录webView接入h5界面时,调起相册、文件、相机无效的解决办法。 在开发项目时,接入一个h5界面。使用webview时,发现界面显示正常,但是按钮不论怎么点都无效,但是m站和ios都正常。后来上网查了相关资料,才发现...
  • 秦子帅明确目标,每天进步一点点.....作者| 星星y地址|https://www.jianshu.com/p/dae373ca9f0f前言哎,Flutter真香啊在用移动设备加载H5页面时...在Android原生WebView中,我们可以在WebViewClient中的shouldInterc...
  • Android开发WebView配置,,兼容H5调用Android手机相册和拍照。并显示。 博客地址:https://blog.csdn.net/To_be_Designer/article/details/79914043
  • //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开 webview.setWebChromeClient(new WebChromeClient() { // For Android >= 5.0 @Override public boolean onShowF
  • 该组件内使用input file,然而flutter webview_flutter貌似还不支持input选择相册打开相机 参照了其它人的文章,特地在这里记录下. https://blog.csdn.net/kameleon2013/article/details/109104531 ...
  • //初始化webView private void initWebView() { //从布局文件中扩展webView webView = (WebView) this.findViewById(R.id.webview); initWebViewSetting(); } //初始化webViewSetting @RequiresApi(api = ...
  • 说起来android适配webview就是比较烦人,本人遇到过很多坑,但是之前从来没有过记录,例如:文件选择框,toast弹框,视频不正常播放,视频各种不全屏(网上说的方法都不行时候就崩溃了,有机会说),两端方法互调,...
  • Android Webview 调起系统相机、相册

    千次阅读 2020-01-13 14:34:47
    拿到该H5页看了一下,H5中调起相机和打开相册的源码分别是: #调起相机 <input type="file" accept="image/*" capture="camera"/> #打开相册 <input type="file" accept="image/*" multiple="multiple"/&...
  • 近期工作较忙,工作中先简单记录下,后期会整理成自己的博文,希望对大家有帮助! 参阅博文: ...3、Android webview 实现h5的input type="file"选择图片调用系统相册/相机并进行图片压缩功能 https://...
  • android webView 图片选择

    2020-08-28 11:56:53
    android webView 图片选择 一、webView 图片选择器调用触发 开发中经常会与H5 交互,遇到图片选择怎么办呢? WebChromeClient 中 onShowFileChooser 可以用来处理图片选择问题 代码如下: mWebView....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,608
精华内容 1,043
关键字:

webview打开相册