android使用默认程序进行图片拍照已经裁剪,以及设备读取

时间:2021-09-25 22:12:38

//代码如下:

package com.cbsw.yulechangsuo.activity;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.cbsw.ylcs.R;
import com.cbsw.yulechangsuo.common.BaseActivity;
import com.cbsw.yulechangsuo.services.UploadService;
import com.cbsw.yulechangsuo.util.idcard.impl.UartIDCardManagerImpl;
import com.cbsw.yulechangsuo.util.idcard.impl.UartIDCardManagerImpl.IDCardListener;
import com.ftdi.j2xx.D2xxManager;
import com.ftdi.j2xx.D2xxManager.D2xxException;

public class MainActivity extends BaseActivity implements IDCardListener{
    
    private Button btn_paizhao,btn_baojing,btn_shangchaun,btn_shuaka;
    private ImageView img_ic,img_paizhao;
    private TextView tx_name,tx_idcard;
    //自定义变量
    public static final int TAKE_PHOTO = 1;
    public static final int CROP_PHOTO = 2;
    private Uri imageUri; //图片路径
    private String filename; //图片名称
    private UartIDCardManagerImpl idCardManager;
    private String icPhotoUri,dkPhotoUri;
    
    @Override
    public void initWidget() {
        setContentView(R.layout.activity_main);
        img_ic=(ImageView)this.findViewById(R.id.img_ic);
        img_paizhao=(ImageView)this.findViewById(R.id.img_paizhao);
        
        btn_paizhao=(Button) this.findViewById(R.id.btn_paizhao);
        btn_paizhao.setOnClickListener(this);
        btn_baojing=(Button)this.findViewById(R.id.btn_baojing);
        btn_baojing.setOnClickListener(this);
        btn_shuaka=(Button)this.findViewById(R.id.btn_shuaka);
        btn_shuaka.setOnClickListener(this);
        btn_shangchaun=(Button)this.findViewById(R.id.btn_shangchuan);
        btn_shangchaun.setOnClickListener(this);
        tx_name=(TextView)this.findViewById(R.id.tx_name);
        tx_idcard=(TextView)this.findViewById(R.id.tx_num);
        
        D2xxManager d2xxManager=null;
        try {
            d2xxManager = D2xxManager.getInstance(this);
        } catch (D2xxException e) {
            e.printStackTrace();
        }
        idCardManager=UartIDCardManagerImpl.getInstance(this, d2xxManager);
        idCardManager.setOnIDCardListener(this);
    }

@Override
    public void widgetClick(View v) {
        switch (v.getId()) {
        case R.id.btn_baojing:
            btn_baojing.setText("已报警!");
            btn_baojing.setBackgroundColor(Color.RED);;
            break;
        case R.id.btn_paizhao:
             //图片名称 时间命名
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
            Date date = new Date(System.currentTimeMillis());
            filename = format.format(date);
            //创建File对象用于存储拍照的图片 SD卡根目录           
            //File outputImage = new File(Environment.getExternalStorageDirectory(),test.jpg);
            //存储至DCIM文件夹
            File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);  
            File outputImage = new File(path,filename+".jpg");
            try {
                if(outputImage.exists()) {
                    outputImage.delete();
                }
                outputImage.createNewFile();
            } catch(IOException e) {
                e.printStackTrace();
            }
            //将File对象转换为URI并启动照相程序
            imageUri = Uri.fromFile(outputImage);
            Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); //照相
            intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //指定图片输出地址
            startActivityForResult(intent,TAKE_PHOTO); //启动照相
            //拍完照startActivityForResult() 结果返回onActivityResult()函数
            break;
        case R.id.btn_shuaka:
            if(null!=idCardManager){
                idCardManager.read();
            }
            break;
        case R.id.btn_shangchuan:
            UploadService uploadService=new UploadService(MainActivity.this);
            icPhotoUri=Environment.getExternalStorageDirectory() + "/wltlib/zp.bmp";
            String judgeStr=uploadService.judgeStr(tx_name.getText().toString(), tx_idcard.getText().toString(), icPhotoUri, dkPhotoUri);
            if(judgeStr.equals("1")){
                uploadService.uploadJl(tx_name.getText().toString(), tx_idcard.getText().toString(), icPhotoUri, dkPhotoUri);
            }else {
                Toast.makeText(MainActivity.this, judgeStr, Toast.LENGTH_SHORT).show();
            }
            uploadService.uploadJl(tx_name.getText().toString(), tx_idcard.getText().toString(), dkPhotoUri, dkPhotoUri);

break;
         default:
            break;
        }
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
            if (resultCode != RESULT_OK) {
                Toast.makeText(MainActivity.this," ActivityResult resultCode error", Toast.LENGTH_SHORT).show();
                return;
            }
            switch(requestCode) {
            case TAKE_PHOTO:
                Intent intent = new Intent("com.android.camera.action.CROP"); //剪裁
                intent.setDataAndType(imageUri, "image/");
                intent.putExtra("scale", true);
                //设置宽高比例
                intent.putExtra("aspectX", 1);
                intent.putExtra("aspectY", 1);
                //设置裁剪图片宽高
                intent.putExtra("outputX", 340);
                intent.putExtra("outputY", 340);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                Toast.makeText(MainActivity.this, "剪裁图片", Toast.LENGTH_SHORT).show();
                //广播刷新相册
                Intent intentBc = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                intentBc.setData(imageUri);     
                this.sendBroadcast(intentBc);    
                startActivityForResult(intent, CROP_PHOTO); //设置裁剪参数显示图片至ImageView
                break;
            case CROP_PHOTO:
                try {    
                    //图片解析成Bitmap对象
                    Bitmap bitmap = BitmapFactory.decodeStream(
                            getContentResolver().openInputStream(imageUri));
                   dkPhotoUri=imageUri.toString();
                    LayoutParams params=img_paizhao.getLayoutParams();
                    params.height=500;
                    params.width=500;
                    img_paizhao.setLayoutParams(params);
                    img_paizhao.setImageBitmap(bitmap); //将剪裁后照片显示出来
                    btn_paizhao.setText("重新拍照");
                } catch(FileNotFoundException e) {
                    e.printStackTrace();
                }
                break;
            default:
                break;
            }
    }
/**
 * 显示身份证信息
 */
    @Override
    public void onShowIDCardData(String[] decodeInfo, Integer readFlag)
            throws IOException {
        
        tx_name.setText(decodeInfo[0]);
        tx_idcard.setText(decodeInfo[5]);
         if (1 == readFlag) {
                FileInputStream fis = new FileInputStream(Environment.getExternalStorageDirectory() + "/wltlib/zp.bmp");
                Bitmap bmp = BitmapFactory.decodeStream(fis);
                fis.close();
                img_ic.setImageBitmap(bmp);
            } else {
                img_ic.setImageResource(R.drawable.face);
            }
        idCardManager.close();
    }

@Override
    public void onShowErrorInfo(String msg, Integer resId) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }
    
}