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

时间:2022-07-05 08:33:26

//代码如下:

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();
    }
    
}

android使用默认程序进行图片拍照已经裁剪,以及设备读取的更多相关文章

  1. android 开发 实现一个进入相机拍照后裁剪图片或者进入相册选中裁剪图片的功能

    实现思维路径: 以进入相机拍照的思维路线为例子: 1.进入app 2.判断之前是否保存头像,如果有就显示历史图像 (下面代码中在getOldAvatar();方法中执行这个逻辑) 3.点击更换图像的B ...

  2. Android系统默认对话框添加图片

    开发工具Android Studio 今天公司UI要求软件对话框改成加图片的,以前没有做过,所以就学习了一下,废话不多说, 看效果: 创建XML文件dialog_lsit_item.xml <L ...

  3. Java和Android Http连接程序:使用java&period;net&period;URL 下载服务器图片到客户端

    Java和Android Http连接程序:使用java.net.URL 下载服务器图片到客户端 本博客前面博文中利用org.apache.http包中API进行Android客户端HTTP连接的例子 ...

  4. &lbrack;Android实例教程&rsqb; 教你如何拍照&plus;相册选择图片&plus;剪裁图片完整实现

    [Android实例教程] 教你如何拍照+相册选择图片+剪裁图片完整实现 今天做Android项目的时候要用到图片选择,要实现拍照获取图片和从相册获取图片,并且要求在获取完之后可以裁剪,试了很多方法之 ...

  5. Android Camera 相机程序编写

    Android Camera 相机程序编写 要自己写一个相机应用直接使用相机硬件,首先应用需要一个权限设置,在AndroidManifest.xml中加上使用设备相机的权限: <uses-per ...

  6. Android 系统默认参数的修改

    转自: http://www.th7.cn/Program/Android/201505/447097.shtml 写在前面的话 一般在新项目开始之初,我们需要针对客户需求进行各种系统默认属性的配置, ...

  7. 微信小程序实现图片是上传、预览功能

    本文实例讲述了微信小程序实现图片上传.删除和预览功能的方法,分享给大家供大家参考,具体如下: 这里主要介绍一下微信小程序的图片上传图片删除和图片预览 1.可以调用相机也可以从本地相册选择 2.本地实现 ...

  8. React native 之android的图标和启动图片

    哎哎呀呀,上篇说到了react native的IOS的图标和启动图片的设置,其实最主要的是尺寸!相应的尺寸设定好了以后就不会报错了! ok~这篇说的是React native的android的图标和启 ...

  9. Android训练课程&lpar;Android Training&rpar; - 高效的显示图片

    高效的显示图片(Displaying BitmapsEfficiently) 了解如何使用通用的技术来处理和读取位图对象,让您的用户界面(UI)组件是可响应的,并避免超过你的应用程序内存限制的方式.如 ...

随机推荐

  1. EF&lpar;Entity Framework&rpar;多对多关系下用LINQ实现&quot&semi;NOT IN&quot&semi;查询

    这是今天在实际开发中遇到的一个问题,需求是查询未分类的博文列表(未加入任何分类的博文),之前是通过存储过程实现的,今天用EF实现了,在这篇博文中记录一下. 博文的实体类BlogPost是这样定义的: ...

  2. 14)Java中Assert

    J2SE 1.4在语言上提供了一个新特性,就是assertion(断言)功能,它是该版本在Java语言方面最大的革新.在软件开发中,assertion是一种经典的调试.测试方式. jvm 断言默认是关 ...

  3. Windows删除大文件

    Temp是目录 或者是 文件很大很大很大很大 cmd rd /s /q Temp

  4. Secant Method &lpar;Website&rpar;

    Secant Method:  https://www.youtube.com/watch?v=qC9xnsfOd30 Secant Method : http://mathworld.wolfram ...

  5. SCP实现无需密码传输文件

    SCP概述 Linux为我们提供了两个用于文件copy的命令,一个是cp,一个是scp,但是他们略有不同 CP ----- 主要是用于在同一台电脑上,在不同的目录之间来回copy文件 SCP ---  ...

  6. Linux系统zookeeper环境搭建(单机、伪分布式、分布式)

    本人现在对zookeeper的环境搭建做一个总结,一般zookeeper的安装部署可以有三种模式,单机模式.伪分布式和分布式,这三种模式在什么时候应用具体看大家的使用场景,如果你只有一台机器且只是想自 ...

  7. curl模拟post和get请求

    function _post($url,$post_data){     $ch = curl_init();     curl_setopt($ch, CURLOPT_URL, $url);     ...

  8. 如何设置Linux(Centos)系统定期任务(corntab详细用法)

    如何设置Linux(Centos)系统定期任务(crontab详细用法) 1.Crontab简介 Linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非 ...

  9. java课程之团队开发冲刺阶段1&period;3

    一.总结昨天进度 1.完成任务指标,但是有些问题没有得到根本上解决,只是换方式解决了 2.使用时间:6小时 二.遇到的困难 1.在设置AlertDialog弹窗组件的时候,没有办法获取选中值,再实验多 ...

  10. mmap:速度快&plus;整块操作

    mmap使得可以将设备内存映射到用户空间,从而使得用户程序获得访问硬件的能力,mmap的动作需要由内核中的驱动来实现.在使用mmap映射后,用户程序对给定范围的内存的读写就变成了对设备内存的读写,也就 ...