import java.io.File;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.KeyEvent;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {
    private String url = "http://101.200.142.201";
    private WebView my_web;
    private ProgressDialog proDlg;
    private Uri imageUri;
    public ValueCallback<Uri> mUploadMessage;
    public final static int REQ_CHOOSER = 1;
    private final static int REQ_CAMERA = 2;

@SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        my_web = (WebView) findViewById(R.id.wv);

// 支持脚本
        my_web.getSettings().setJavaScriptEnabled(true);
        //加载服务器的路径
        my_web.loadUrl(url);
        //创建对话框
        proDlg = new ProgressDialog(MainActivity.this);
        my_web.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // my_web.loadUrl(url);
                return super.shouldOverrideUrlLoading(view, url);
            }

@Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                proDlg.setMessage("正在加载,请稍候...");
                // 显示加载进度对话框
                proDlg.show();
            }

/**
             * 页面加载完成时,回调此方法
             */
            @Override
            public void onPageFinished(WebView view, String url) {
                // 隐藏加载进度对话框
                proDlg.dismiss();
            }
        });

my_web.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                proDlg.setMessage("loading" + newProgress + "%......");
            }

// For Android 3.0+
            public void openFileChooser(ValueCallback<Uri> uploadMsg) {
                openFileChooser(uploadMsg, "");
            }

// For Android 3.0+
            public void openFileChooser(ValueCallback uploadMsg,
                    String acceptType) {
                openFileChooser(uploadMsg, acceptType);
            }

// For Android 4.1
            public void openFileChooser(ValueCallback<Uri> uploadMsg,
                    String acceptType, String capture) {
                mUploadMessage = uploadMsg;
                selectImage();
            }

});
    }

protected final void selectImage() {
        AlertDialog.Builder builder = new Builder(MainActivity.this);
        // builder.setTitle("插入照片");
        final String[] items = { "照相机", "相册" };
        builder.setItems(items, new DialogInterface.OnClickListener() {
            @SuppressLint("SdCardPath")
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), items[which],
                        Toast.LENGTH_SHORT).show();
                Intent intent = null;
                switch (which) {
                // 调用照相机
                case 0:
                    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    // 必须确保文件夹路径存在,否则拍照后无法完成回调
                    File vFile = new File(Environment
                            .getExternalStorageDirectory().getPath()
                            + "/DCIM/Camera/"
                            + (System.currentTimeMillis() + ".jpg"));
                    if (!vFile.exists()) {
                        File vDirPath = vFile.getParentFile();
                        vDirPath.mkdirs();
                    } else {
                        if (vFile.exists()) {
                            vFile.delete();
                        }
                    }
                    imageUri = Uri.fromFile(vFile);
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                    MainActivity.this
                            .startActivityForResult(intent, REQ_CAMERA);
                    break;
                case 1:
                    intent = new Intent(Intent.ACTION_PICK, null);
                    intent.setDataAndType(
                            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            "image/*");
                    MainActivity.this.startActivityForResult(
                            Intent.createChooser(intent, "选择图片"), REQ_CHOOSER);
                    break;
                }
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                
                dialog.cancel();
                
                if(mUploadMessage!=null){
                    mUploadMessage.onReceiveValue(null);
                    selectImage();
                }
                
                
            }
        });
        builder.create().show();
    }

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case REQ_CHOOSER:
            if (null == mUploadMessage)
                return;
            Uri result = data == null || resultCode != RESULT_OK ? null : data
                    .getData();
            mUploadMessage.onReceiveValue(result);
            mUploadMessage = null;
            break;
        case REQ_CAMERA:
            if (resultCode == Activity.RESULT_OK) {
                mUploadMessage.onReceiveValue(imageUri);
                mUploadMessage = null;
            }
            break;
        }
    }

// 此按键监听的是返回键,能够返回到上一个网页(通过网页的hostlistery)
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && my_web.canGoBack()) {
            my_web.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

webview上传图片的更多相关文章

  1. android使用Webview上传图片

    package com.example.webview; import java.io.File; import android.net.Uri;import android.os.Bundle;im ...

  2. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  3. Android webview实现上传图片的效果(图片压缩)

    mainactivity代码 package com.bwie.webviewupload; import java.io.ByteArrayInputStream; import java.io.B ...

  4. 部分vivo和oppo手机,使用上传图片功能,可能会出现退出webview的现象(回退到app的入口页面)

    在公司的app里面嵌入了一个h5页面,h5页面有个使用图片上传功能,上传图片出现闪退的现象 问题描述:vivo手机,在app内的wap页面使用上传图片的功能,在选择好图片点击确认按钮后,出现退出整个w ...

  5. WebView使用input file控件打开相册上传图片

    使用 WebView 直接用 控件选择相册图片 package com.moguzhuan.android.zhuan; import android.annotation.TargetApi; im ...

  6. 从手机获取图片让WebView支持本地上传图片

    一,从本地获取相册中的图片,并获取图片的URI 从本地选择图片上传到服务器时,首先要打开本地图片或文件管理器选择要上传的文件,代码如下 Intent intent =newIntent(Intent. ...

  7. Android WebView 开发教程

    声明在先:必须在AndroidMainfest.xml 里面声明权限,否则在Java里面编写的所有WebView浏览网页的代码都无法正常使用 <uses-permission android:n ...

  8. Android WebView 开发详解(二)

    转载请注明出处  http://blog.csdn.net/typename/article/details/39495409 powered by miechal zhao   概览: Androi ...

  9. WebView之js调用Android类的方法传递数据

    1,具体的思路如下: 在android中写一个Activity,里面写一个webview,这个webview加载本地的一个html文件,显示这个网页,这个网页包括一个用户名和密码的输入框和两个按钮(只 ...

随机推荐

  1. shell远程执行命令

    ssh主要参数说明 -l 指定登入用户 -p 设置端口号 -f 后台运行,并推荐加上 -n 参数 -n 将标准输入重定向到 /dev/null,防止读取标准输入 -N 不执行远程命令,只做端口转发 - ...

  2. TCP拥塞控制

    TCP必须使用端到端拥塞控制而不是使网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈.TCP采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率. 几个相关 ...

  3. double精度问题,数据范围

    浮点数在计算机中存储方式  http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html 1. double:  1bit(符号位) ...

  4. er6855的工作经验

    1 VIEWS里面的关系要搞清楚 里面的内容类型要理清 不要相信别人做好的事情 不要相信看到的结果 2 git rm -rf之后需要git commit提交到.git文件中正式生效 不然可能就是中间打 ...

  5. 如何进行shell脚本正确性测试

    在实际工作中,需要对shell脚本进行正确性测试. 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严 ...

  6. eclipse 新建 maven 项目 添加 spring hibernate 的配置文件 详情

    主要配置文件 pom.xml 项目的maven 配置文件 管理项目所需 jar 依赖支持 web.xml 项目的总 配置文件  :添加 spring和hibernate 支持 applicationC ...

  7. python核心编程第六章练习6-8

    6-8.列表.给出一个整型值,返回代表该值得英文,比如输入89会返回“eight-nine”.附加题:能够返回符合英文语法规律的新式,比如输入89会返回“eighty-nine”.本练习中的值假定在0 ...

  8. Controller简介

    Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分: 1.收集.验证请求参数并绑定到命令对象: 2.将命令对象交给业务对象,由业务对象处理并返回模型数 ...

  9. centos7配置mono和jexus5.6.2

    一.通过集成包安装mono: 1.添加Mono的 包库源: 把Mono Project public Jenkins GPG signing  导入系统 wget http://jenkins.mon ...

  10. [转载]SoapUI 参数化&数据库连接

    引用自 : http://www.cnblogs.com/liulinghua90/p/4954045.html 如果是没有代码能力的小白,要利用工具进行接口测试的时候,经常会遇到接口地址 或者接口参 ...