系统应用技术的调用-照相机

0. Intent意图对象分类

1.显示意图:
2.隐式意图:
一.使用隐式意图调用拍照/图库/摄像机
1.使用隐式意图调用系统拍照界面
2.使用隐式意图调用系统录视频界面
3.使用隐式意图打开图库
二 .在onActivityResult处理结果
三。 所有代码

)
0. Intent意图对象分类
1.显示意图:
一般情况下是用于,APP应用自身:组件(Activity,Service,…) 与 组件(Activity,Service,…) 的激活调用
在这里插入图片描述
2.隐式意图:
隐式意图一般情况下用于,两个应用程序的:组件(Activity,Service,…) 与 组件(Activity,Service,…) 的激活调用
在这里插入图片描述

实现代码

package com.example.day07_camera;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.VideoView;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button bt_pick;
    Button bt_vido;
    Button bt_camer;
    ImageView img;
    VideoView vido;
    String path;
    public  static  final int Pick_Code = 101;//相册请求吗
    public  static  final int Vido_Code = 102;//摄像机请求吗
    public  static  final int Camer_Code = 103;//照相机请求吗
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_pick = findViewById(R.id.bt_pick);
        bt_vido = findViewById(R.id.bt_vido);
        bt_camer = findViewById(R.id.bt_camer);
        img = findViewById(R.id.img);
        vido = findViewById(R.id.vido);
        bt_pick.setOnClickListener(this);
        bt_vido.setOnClickListener(this);
        bt_camer.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_pick:
                openPick();
                break;
            case R.id.bt_vido:
                openVido();
                break;
            case R.id.bt_camer:
                openCamer();
                break;
        }
    }
    //打开照相机
    private void openCamer() {
        Intent intent = new Intent();
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        //TODO 1:使用内容提供者向图库插入一条记录
        //生成图片的名字
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int hour = calendar.get(Calendar.HOUR);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        String name="IMG_"+year+(month+1)+day+"_"+hour+minute+second+".jpg";
        path="/sdcard/DCIM/Camera/"+name;
        //使用内容提供者添加道SD卡中
        ContentValues contentValues = new ContentValues();
        contentValues.put(MediaStore.Images.Media.DATA,path);
        ContentResolver contentResolver = getContentResolver();
        Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
        //TODO 2:将照片保存到SD卡中
        intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
        startActivityForResult(intent,Camer_Code);
    }

    //打开摄相机
    private void openVido() {
        Intent intent = new Intent();
        intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
        startActivityForResult(intent,Vido_Code);
    }

    //打开图库方法
    private void openPick() {
        //创建隐式意图跳转
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_PICK);
        //添加guolv
        intent.setType("image/*");//打开所有的照片
        // intent.setType("video/*");//打开所有的视频
        startActivityForResult(intent,Pick_Code);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Pick_Code){
            if (resultCode == Activity.RESULT_OK){
                Uri uri = data.getData();
                img.setImageURI(uri);
            }else {
                Toast.makeText(this, "返回数据失败", Toast.LENGTH_SHORT).show();
            }
        }else if (requestCode == Vido_Code){
            if (resultCode == Activity.RESULT_OK){
                Uri uri = data.getData();
                vido.setVideoURI(uri);
                vido.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        vido.start();
                    }
                });
            }else {
                Toast.makeText(this, "返回数据失败", Toast.LENGTH_SHORT).show();
            }
        }else if (requestCode == Camer_Code){
            if (resultCode == Activity.RESULT_OK){
                Bitmap bitmap = BitmapFactory.decodeFile(path);
                img.setImageBitmap(bitmap);
            }else {
                Toast.makeText(this, "返回数据失败", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

添加权限(打开照相机)

    <uses-permission android:name="android.permission.CAMERA"></uses-permission>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MX_XXS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值