mainactivity代码

package com.bwie.webviewupload;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.util.Base64;import android.view.Gravity;import android.view.View;import android.view.View.OnClickListener;import android.webkit.ValueCallback;import android.webkit.WebChromeClient;import android.webkit.WebView;public class MainActivity extends Activity {    private ValueCallback<Uri> mUploadMessage;    public static final int NONE = 0;    public static final int PHOTO_CAMERA = 1;// 相机拍照    public static final int PHOTO_COMPILE = 2; // 编辑图片    public static final int PHOTO_RESOULT = 3;// 结果    private String ImageName;    Bitmap myBitmap;    private byte[] mContent;    public static String getStringToday() {        Date currentTime = new Date();        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");        String dateString = formatter.format(currentTime);        return dateString;    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 找控件        final WebView wv = (WebView) findViewById(R.id.wv);        // 设置js有效        wv.getSettings().setJavaScriptEnabled(true);        // 为wv加载网络页面        wv.loadUrl("http://101.200.142.201/Login/register.html");        // 为wv设置js交互        wv.setWebChromeClient(new WebChromeClient() {            // 进行上传            @SuppressWarnings("unused")            public void openFileChooser(ValueCallback<Uri> uploadMsg,                    String acceptType, String capture) {                mUploadMessage = uploadMsg;                // 在下方弹出poppupWindow                MyPopupWindow pop = new MyPopupWindow(MainActivity.this,                        new OnClickListener() {                            @Override                            public void onClick(View v) {                                // TODO Auto-generated method stub                                // 判断                                switch (v.getId()) {                                case R.id.btn_pick_photo:                                    // 设置调用系统相册的意图(隐式意图)                                    Intent intent = new Intent();                                    // 设置值活动//android.intent.action.PICK                                    intent.setAction(Intent.ACTION_PICK);                                    // 设置类型和数据                                    intent.setDataAndType(                                            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,                                            "image/*");                                    // 开启系统的相册                                    startActivityForResult(intent,                                            PHOTO_COMPILE);                                    break;                                case R.id.btn_take_photo:                                    // 设置图片的名称                                    ImageName = "/" + getStringToday() + ".jpg";                                    // 设置调用系统摄像头的意图(隐式意图)                                    Intent intent1 = new Intent(                                            MediaStore.ACTION_IMAGE_CAPTURE);                                    // 设置照片的输出路径和文件名                                    File file = new File(Environment                                            .getExternalStorageDirectory(),                                            ImageName);                                    intent1.putExtra(MediaStore.EXTRA_OUTPUT,                                            Uri.fromFile(file));                                    // 开启摄像头                                    startActivityForResult(intent1,                                            PHOTO_CAMERA);                                    break;                                case R.id.btn_cancel:                                    break;                                }                            }                        });                // 显示窗口 main 为mainactivity的主控件                pop.showAtLocation(MainActivity.this.findViewById(R.id.main),                        Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); // 设置layout在PopupWindow中显示的位置            }        });    }    // 调用startActivityResult,返回之后的回调函数    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        ContentResolver resolver = getContentResolver();        // 照片的处理结果        if (requestCode == PHOTO_COMPILE) {        //进行图片的压缩            String path = getAbsoluteImagePath(data.getData());            Bitmap bitmap = getimage(path);
//转成url Uri imageUri = Uri.parse(MediaStore.Images.Media.insertImage( getContentResolver(), bitmap, null, null)); Uri result = data == null || resultCode != RESULT_OK ? null
: data.getData();
//上传图片 mUploadMessage.onReceiveValue(result); mUploadMessage
= null; } if (requestCode == PHOTO_CAMERA)// 拍照 { // 设置文件保存路径这里放在跟目录下 File picture = new File(Environment.getExternalStorageDirectory() + ImageName);         //进行图片的压缩 Bitmap bitmap1 = getimage(picture.getPath()); //转成url Uri imageUri = Uri.parse(MediaStore.Images.Media.insertImage( getContentResolver(), bitmap1, null, null));
//上传图片 mUploadMessage.onReceiveValue(imageUri); mUploadMessage
= null; } super.onActivityResult(requestCode, resultCode, data); } // http://blog.csdn.net/cherry609195946/article/details/9264409 // android图片压缩总结 // // 图片按比例大小压缩方法(根据Bitmap图片压缩) // 压缩图片url private Bitmap getimage(String srcPath) { BitmapFactory.Options newOpts = new BitmapFactory.Options(); // 开始读入图片,此时把options.inJustDecodeBounds 设回true了 newOpts.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此时返回bm为空 newOpts.inJustDecodeBounds = false; int w = newOpts.outWidth; int h = newOpts.outHeight; // 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为 float hh = 800f;// 这里设置高度为800f float ww = 480f;// 这里设置宽度为480f // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可 int be = 1;// be=1表示不缩放 if (w > h && w > ww) {// 如果宽度大的话根据宽度固定大小缩放 be = (int) (newOpts.outWidth / ww); } else if (w < h && h > hh) {// 如果高度高的话根据宽度固定大小缩放 be = (int) (newOpts.outHeight / hh); } if (be <= 0) be = 1; newOpts.inSampleSize = be;// 设置缩放比例 // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了 bitmap = BitmapFactory.decodeFile(srcPath, newOpts); return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩 } private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 100; while (baos.toByteArray().length / 1024 > 100) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩 baos.reset();// 重置baos即清空baos image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中 options -= 10;// 每次都减少10 } ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片 return bitmap; } protected String getAbsoluteImagePath(Uri uri) { // can post image String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, proj, // Which columns to return null, // WHERE clause; which rows to return (all rows) null, // WHERE clause selection arguments (none) null); // Order-by clause (ascending by name) int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }}

重写popupWindow代码

package com.bwie.webviewupload;import android.app.Activity;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.view.ViewGroup.LayoutParams;import android.widget.Button;import android.widget.PopupWindow;public class MyPopupWindow extends PopupWindow {    private Button btn_take_photo, btn_pick_photo, btn_cancel;    private View mMenuView;    public MyPopupWindow(Activity context, OnClickListener itemsOnClick) {        super();        LayoutInflater inflater = (LayoutInflater) context                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);        mMenuView = inflater.inflate(R.layout.popup, null);        btn_take_photo = (Button) mMenuView.findViewById(R.id.btn_take_photo);        btn_pick_photo = (Button) mMenuView.findViewById(R.id.btn_pick_photo);        btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel);        // 取消按钮        btn_cancel.setOnClickListener(new OnClickListener() {            public void onClick(View v) {                // 销毁弹出框                dismiss();            }        });        // 设置按钮监听        btn_pick_photo.setOnClickListener(itemsOnClick);        btn_take_photo.setOnClickListener(itemsOnClick);        // 设置SelectPicPopupWindow的View        this.setContentView(mMenuView);        // 设置SelectPicPopupWindow弹出窗体的宽        this.setWidth(LayoutParams.FILL_PARENT);        // 设置SelectPicPopupWindow弹出窗体的高        this.setHeight(LayoutParams.WRAP_CONTENT);        // 设置SelectPicPopupWindow弹出窗体可点击        this.setFocusable(true);        // 设置SelectPicPopupWindow弹出窗体动画效果        this.setAnimationStyle(R.style.mypopwindow_anim_style);        // 实例化一个ColorDrawable颜色为半透明        // ColorDrawable dw = new ColorDrawable(0xb0000000);        // 设置SelectPicPopupWindow弹出窗体的背景        // this.setBackgroundDrawable(dw);        // mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框        mMenuView.setOnTouchListener(new OnTouchListener() {            public boolean onTouch(View v, MotionEvent event) {                int height = mMenuView.findViewById(R.id.pop_layout).getTop();                int y = (int) event.getY();                if (event.getAction() == MotionEvent.ACTION_UP) {                    if (y < height) {                        dismiss();                    }                }                return true;            }        });    }}

更多相关文章

  1. [Android]调用系统相册获取图片
  2. assets点9图加载成NinePatchDrawable
  3. 图片加载缓存类的具体实现
  4. Android在整个项目中设置自定义字体
  5. android&&DatePicker&&TimePicker
  6. ImageLoader修改后
  7. andriod之ContentProvider读取外部存储图片
  8. 水波纹效果---3环波纹
  9. android中使用surfaceview进行视频播放

随机推荐

  1. android FM播放时拔出耳机后FM APP自动cl
  2. android Intent打开各种类型文件
  3. 控件布局_FrameLayout(网格布局)
  4. 【Android】SAX解析之错误纠正!!
  5. android获取SIM卡信息和手机号码
  6. Android通过SOAP协议和基于XFire实现的we
  7. IntelHaxm : 加速android模拟器启动速度(S
  8. MapView学习Demo2
  9. Kotlin Android(安卓)WebView与H5的相互
  10. android 比较靠谱的图片压缩