android调用系统摄像机

本文介绍了一个简单的Android应用程序,该程序包含相机拍照功能及二维码生成与扫描功能。通过调用系统的相机API,用户可以拍摄照片并将其显示在界面上;同时,程序还实现了二维码的生成与扫描,并展示扫描结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.mycamera;

import android.content.Intent;
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.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private static int REQ_CAMERA = 1;
    private static int REQ_CAMERA2 = 2;  //两个请求码
    private Button btn_open,btn_open2;
    private ImageView img;

    private String mFilePath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_open = (Button) findViewById(R.id.bt_open);
        btn_open2 = (Button) findViewById(R.id.bt_open2);
        btn_open.setOnClickListener(this);
        btn_open2.setOnClickListener(this);
        img = (ImageView) findViewById(R.id.img);

        mFilePath = Environment.getExternalStorageDirectory().getPath() + "/" + "test.png";
    }

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        switch (view.getId()){
            case R.id.bt_open:
                startActivityForResult(intent,REQ_CAMERA);
                break;
            case R.id.bt_open2:
                Uri uri = Uri.fromFile(new File(mFilePath));
                intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
                startActivityForResult(intent,REQ_CAMERA2);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK){
            if (requestCode == REQ_CAMERA){
                Bundle bundle = data.getExtras();
                Bitmap bitmap = (Bitmap) bundle.get("data");
                img.setImageBitmap(bitmap);
            }else if (requestCode == REQ_CAMERA2){
                FileInputStream fis = null;
                try {
                    fis= new FileInputStream(mFilePath);
                    Bitmap bitmap = BitmapFactory.decodeStream(fis);
                    img.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }finally {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
package com.example.myscandemo;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.xys.libzxing.zxing.activity.CaptureActivity;
import com.xys.libzxing.zxing.encoding.EncodingUtils;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private static int REQUEST_SCAN = 0;
    private Button bt_Scan,bt_Create;
    private TextView tv_Result;
    private EditText edit_Input;
    private ImageView img_QRcode;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_Create = (Button) findViewById(R.id.bt_create);
        bt_Scan = (Button) findViewById(R.id.bt_scan);
        bt_Create.setOnClickListener(this);
        bt_Scan.setOnClickListener(this);
        tv_Result = (TextView) findViewById(R.id.tv_result);
        edit_Input = (EditText) findViewById(R.id.edit_input);
        img_QRcode = (ImageView) findViewById(R.id.img_qrcode);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.bt_scan:
                Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
                startActivityForResult(intent,REQUEST_SCAN);
                break;
            case R.id.bt_create:
                String input = edit_Input.getText().toString();
                Bitmap bitmap = EncodingUtils.createQRCode(input,500,500,null);
                img_QRcode.setImageBitmap(bitmap);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK){
            //如果点击的扫描二维码,启动CaptureActivity ,处理后返回所需要的数据
            Bundle bundle = data.getExtras();
            String result = bundle.getString("result");
            tv_Result.setText(result);
        }
    }
}

















首先用到照相机,以及需要访问系统文件所以添加用户权限:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在使用缩略图的时候没有保存,直接用bitmap解析从Intent相机带回来的数据。


在用原图的时候,是将图片保存到本地,在用户界面中显示的是本地文件

得到图片存储的的路径

String mFilePath = Environment.getExternalStorageDirectory().getPath() + "/" + "test.png";
在按钮的响应事件中更改view需要显示的东西

Uri uri = Uri.fromFile(new File(mFilePath));
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
startActivityForResult(intent,REQ_CAMERA2);
最后解析该路径中的图片文件为bitmap格式,直接给imageview赋值
FileInputStream fis= new FileInputStream(mFilePath);
Bitmap bitmap = BitmapFactory.decodeStream(fis);
img.setImageBitmap(bitmap);

(来源于慕课)

喵了个咪^ ^



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值