android 通过webView上传文件给服务器(包括拍照)

来源:互联网 发布:阿里妈妈淘宝客下载 编辑:程序博客网 时间:2024/06/03 12:45

小白一记,给自己备用  也给其它小白一个完整的通过webview上传的代码思路。

首先是权限要加上:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 调用摄像头的权限 -->
    <uses-permission android:name="android.permission.CAMERA"/>
<!-- 文件系统权限  -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- SD卡写权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


声明变量

    private ValueCallback<Uri> mUploadMessage;
    private File cameraDataDir;
    private File externalDataDir;
    private String mCameraFilePath;

设置代理,覆写openFileChooser方法

webView.setWebChromeClient(new WebChromeClient() {
             // For Android  > 4.1.1
            public void openFileChooser(ValueCallback<Uri> uploadMsg,String acceptType,String capture){
                mUploadMessage = uploadMsg;
                WebViewActivity.this.startActivityForResult(createDefaultOpenableIntent(), Constants.FILECHOOSER_RESULTCODE);
            }
            // For Android 3.0+
            public void openFileChooser(ValueCallback<Uri> uploadMsg,String acceptType){
                mUploadMessage = uploadMsg;
                WebViewActivity.this.startActivityForResult(createDefaultOpenableIntent(), Constants.FILECHOOSER_RESULTCODE);
            }
            // For Android < 3.0
            public void openFileChooser(ValueCallback<Uri> uploadMsg) {
                mUploadMessage = uploadMsg;
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                  intent.setType("*/*");
                  WebViewActivity.this.startActivityForResult(Intent.createChooser(intent, "upload ok"), Constants.FILECHOOSER_RESULTCODE);
                  
            }

        });


/*
         ***自定义哪些选择器可以被自带浏览器打开***
         *R:打开相应文件的选择器
         *Author: Belinda Yang    Time: Dec.31 2014 14:40
         */
       private Intent createDefaultOpenableIntent() {
           Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
           intent.addCategory(Intent.CATEGORY_OPENABLE);
           intent.setType("*/*");

           Intent chooser = createChooserIntent(createCameraIntent(), new Intent(MediaStore.ACTION_VIDEO_CAPTURE));
           chooser.putExtra(Intent.EXTRA_INTENT, intent);
           return chooser;
        }
        
        private Intent createChooserIntent(Intent... intents) {
            Intent chooser = new Intent(Intent.ACTION_CHOOSER);
            chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents);
            chooser.putExtra(Intent.EXTRA_TITLE, "File Chooser");
           return chooser;
        }

        private Intent createCameraIntent() {
            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            externalDataDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
            cameraDataDir = new File(externalDataDir.getAbsolutePath() + File.separator + "browser-photos");
            cameraDataDir.mkdirs();
            mCameraFilePath = cameraDataDir.getAbsolutePath() + File.separator +System.currentTimeMillis() + ".jpg";
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mCameraFilePath)));
            return cameraIntent;
        }


结果值处理

     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
         if (requestCode == Constants.FILECHOOSER_RESULTCODE) {
             if (null == mUploadMessage)
                 return;
             Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
//            System.out.println("BY~~~ result= "+result);
             if (result == null && intent == null && resultCode == Activity.RESULT_OK) {
                    File cameraFile = new File(mCameraFilePath );
                 if (cameraFile.exists()) {
                     result = Uri.fromFile(cameraFile);
                     sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, result));
                 }
            }
                            
            mUploadMessage.onReceiveValue(result);
            mUploadMessage = null;
        }
     }

1 0
原创粉丝点击