android 打开系统相机,

1.第一步在androidmanifest。xml中注册

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2.第二步创建activity_creama.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:paddingBottom="@dimen/activity_vertical_margin"tools:context="com.cqytjr.www.networkreceiver.CramaActivity"><Buttonandroid:id="@+id/btn_creama"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="@string/hello_world"tools:context=".CramaActivity" /><ImageViewandroid:id="@+id/img_creama"android:layout_width="150dip"android:layout_height="150dip"android:layout_margin="15dip"android:layout_centerHorizontal="true"android:layout_below="@+id/btn_creama"android:scaleType="fitXY"/><TextViewandroid:id="@+id/text"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_below="@+id/img_creama"android:textSize="16sp"android:background="#22000000"/></RelativeLayout>

3. 第三步创建cramaactivity

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;public class CramaActivity extends Activity {private Button creama=null;private ImageView img=null;private TextView text=null;private File tempFile = new File(Environment.getExternalStorageDirectory(),getPhotoFileName());private static final int PHOTO_REQUEST_TAKEPHOTO = 1;// 拍照private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择private static final int PHOTO_REQUEST_CUT = 3;// 结果@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_crama);init();Log.i("TAG-->", ""+Environment.getExternalStorageDirectory());}private void init() {// TODO Auto-generated method stubcreama=(Button) findViewById(R.id.btn_creama);img=(ImageView) findViewById(R.id.img_creama);creama.setOnClickListener(listener);text=(TextView) findViewById(R.id.text);}protected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case PHOTO_REQUEST_TAKEPHOTO:// 当选择拍照时调用startPhotoZoom(Uri.fromFile(tempFile));break;case PHOTO_REQUEST_GALLERY:// 当选择从本地获取图片时// 做非空判断,当我们觉得不满意想重新剪裁的时候便不会报异常,下同if (data != null)startPhotoZoom(data.getData());break;case PHOTO_REQUEST_CUT:// 返回的结果if (data != null)// setPicToView(data);sentPicToNext(data);break;}super.onActivityResult(requestCode, resultCode, data);}private OnClickListener listener = new OnClickListener(){@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent cameraintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 指定调用相机拍照后照片的储存路径cameraintent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(tempFile));startActivityForResult(cameraintent, PHOTO_REQUEST_TAKEPHOTO);}};private void startPhotoZoom(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");// crop为true是设置在开启的intent中设置显示的view可以剪裁intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX,outputY 是剪裁图片的宽高intent.putExtra("outputX", 300);intent.putExtra("outputY", 300);intent.putExtra("return-data", true);intent.putExtra("noFaceDetection", true);startActivityForResult(intent, PHOTO_REQUEST_CUT);}// 将进行剪裁后的图片传递到下一个界面上private void sentPicToNext(Intent picdata) {Bundle bundle = picdata.getExtras();if (bundle != null) {Bitmap photo = bundle.getParcelable("data");if (photo==null) {img.setImageResource(R.drawable.ic_launcher);}else {img.setImageBitmap(photo);
//                设置文本内容为    图片绝对路径和名字text.setText(tempFile.getAbsolutePath());}ByteArrayOutputStream baos = null;try {baos = new ByteArrayOutputStream();photo.compress(Bitmap.CompressFormat.JPEG, 100, baos);byte[] photodata = baos.toByteArray();System.out.println(photodata.toString());// Intent intent = new Intent();// intent.setClass(RegisterActivity.this, ShowActivity.class);// intent.putExtra("photo", photodata);// startActivity(intent);// finish();} catch (Exception e) {e.getStackTrace();} finally {if (baos != null) {try {baos.close();} catch (Exception e) {e.printStackTrace();}}}}}// 使用系统当前日期加以调整作为照片的名称private String getPhotoFileName() {Date date = new Date(System.currentTimeMillis());SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");return dateFormat.format(date) + ".jpg";}
}

 

 

 

 

 

 

第二种方式,我们不需要剪裁,直接用:

androidmanifest注册

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

 第二部:

xml文件添加一个imageview

 <ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:src="@drawable/ic_launcher"android:id="@+id/imageView"/>

 activity代码

public class MainActivity extends Activity {GridView gridView;ImageView imageView;private Bitmap bitmap;final  static  int REQUEST_CODE_PICK_IMAGE = 1;final  static  int REQUEST_CODE_CAPTURE_CAMEIA = 2;protected void getImageFromAlbum() {Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");//相片类型startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);}protected void getImageFromCamera() {String state = Environment.getExternalStorageState();if (state.equals(Environment.MEDIA_MOUNTED)) {Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");startActivityForResult(getImageByCamera, REQUEST_CODE_CAPTURE_CAMEIA);}else {Toast.makeText(getApplicationContext(), "请确认已经插入SD卡", Toast.LENGTH_LONG).show();}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);//        gridView = (GridView)findViewById(R.id.grid_view);imageView = (ImageView) findViewById(R.id.imageView);imageView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {getImageFromAlbum();}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_CODE_PICK_IMAGE) {Uri uri = data.getData();
//            Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);try {Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);imageView.setImageBitmap(bitmap);} catch (IOException e) {e.printStackTrace();}} else if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA ) {Bundle extras = data.getExtras();Bitmap map = (Bitmap)extras.get("data");imageView.setImageBitmap(map);} }}

 

转载于:https://www.cnblogs.com/hualuoshuijia/p/6911435.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】-- Django 中间件、缓存、信号

Django 中间件、缓存、信号 一、 Django 中间件 django 中的中间件&#xff08;middleware&#xff09;&#xff0c;在django中&#xff0c;中间件其实就是一个类&#xff0c;在请求到来和结束后&#xff0c;django会根据自己的规则在合适的时机执行中间件中相应的方法。 在d…

【温故知新】C#中 IEnumerable 与IQueryable

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 后台回复 源码 即可;如果觉得对你有帮助&#xff0c;欢迎关注老生常谈 C#中 IEnumerable 与IQueryableIEnumerable 与 IQueryable 对于.Neter来说并不陌生&#xff0c;今天我就着重阐…

5个知识点,让 Vue3 开发更加丝滑

一、setup name 增强 Vue3的setup语法糖是个好东西&#xff0c;但使用setup语法带来的第一个问题就是无法自定义name&#xff0c;而我们使用keep-alive往往是需要name的&#xff0c;解决这个问题通常是通过写两个script标签来解决&#xff0c;一个使用setup&#xff0c;一个不使…

石子归并 51Nod - 1021

N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆&#xff0c;并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。 例如&#xff1a; 1 2 3 4&#xff0c;有不少合并方法1 2 3 4 > 3 3 4(3) > 6 4…

Scala基础 - _root_ package的作用

2019独角兽企业重金招聘Python工程师标准>>> 在Scala中引入类时支持相对路径&#xff0c;例如&#xff1a; import play.api.libs.json._ import play.api.libs.json.util.LazyHelper可以简写成&#xff1a; import play.api.libs.json._ import util.LazyHelper通常…

使用.NET简单实现一个Redis的高性能克隆版(六)

译者注该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单、高性能兼容Redis协议的数据库的经历。首先这个"Redis"是非常简单的实现&#xff0c;但是他在优化这个简单"Redis"路程很有趣&#xff0c;也能给我们在从事性能优化工作时带来一些启…

Netty 4.x – ByteBuf

2019独角兽企业重金招聘Python工程师标准>>> 1、ByteBuf与Java NIO Buffer ByteBuf则是Java NIO Buffer的新轮子&#xff0c;官方列出了一些ByteBuf的特性&#xff1a; 需要的话&#xff0c;可以自定义buffer类型&#xff1b;通过组合buffer类型&#xff0c;可实现透…

Vue3关于响应式数据类型(ref、reactive、toRef、以及toRefs)

ref 接受一个内部值&#xff0c;返回一个响应式的、可更改的 ref 对象&#xff0c;此对象只有一个指向其内部值的 property .value。类型function ref<T>(value: T): Ref<UnwrapRef<T>>interface Ref<T> {value: T }详细信息ref 对象是可更改的&#x…

智能路由器-OpenWRT 系列四 (挂载移动设备)

每次ssh登陆OpenWRT安装新软件时&#xff0c;都必须更新opkg opkg update安装驱动 为了可以识别U盘/移动硬盘&#xff0c;必须安装相关的驱动。 一类是usb相关的驱动 opkg install kmod-usb-core #usb驱动 opkg install kmod-scsi-core #SCSI总线驱动 opkg install kmod-scs…

jstl 处理Date 时间

1、引入 <% taglib prefix"fmt" uri"http://java.sun.com/jsp/jstl/fmt" %> <fmt:formatDate value"${Date}" pattern"yyyy-MM" /><!-- 这里的value只能是date类型--> pattern 随意发挥了&#xff01;转载于:https:…

windows系统vscode检查更新菜单消失且不能自动更新(1.70.0不能自动更新到1.70.2

翻了半天vscode的issues中终于找到了https://github.com/microsoft/vscode/issues/157624 解决方案 不能用管理员身份运行vscode&#xff0c;不然就没有检查更新菜单&#xff0c;关闭后重启vscode就有更新菜单了 相关回答 翻译一下&#xff0c;就是vscode分用户类型和系统类型两…

LinkedHashMap的实现原理

1. LinkedHashMap概述&#xff1a; LinkedHashMap是Map接口的哈希表和链接列表实现&#xff0c;具有可预知的迭代顺序。此实现提供所有可选的映射操作&#xff0c;并允许使用null值和null键。此类不保证映射的顺序&#xff0c;特别是它不保证该顺序恒久不变。 LinkedHashMap…

验证-表单令牌

表单令牌验证规则支持对表单的令牌验证&#xff0c;首先需要在你的表单里面增加下面隐藏域&#xff1a;或者然后在你的验证规则中&#xff0c;添加token验证规则即可&#xff0c;例如&#xff0c;如果使用的是验证器的话&#xff0c;可以改为&#xff1a;如果你的令牌名称不是_…

WPF 用户控件分享之边上带输入框的圆圈

WPF 用户控件分享之边上带输入框的圆圈独立观察员 2022 年 8 月 20 日最近有这样一个需求&#xff0c;有一圈圆形&#xff0c;每个圆形边上有个输入框&#xff0c;以下是完成后的效果图&#xff1a;拿到这个需求后&#xff0c;分析界面上每个圆形和输入框应该视为一个用户控件&…

总统与乞丐

一位总统带着孙子散步&#xff0c;有个乞丐向他鞠躬敬礼&#xff0c;总统马上驻足还礼&#xff0c;而且弯腰更深。孙子不解:“他只是个乞丐啊&#xff01;” 总统回答&#xff1a;“我绝不允许一个乞丐比总统更有礼貌&#xff01;不要以为别人尊敬你&#xff0c;是因为你很优秀…

VUE3 v-show 引起的表单验证问题

<el-form ref"formRef" :rules"rules" :model"form" label-width"80px"><el-form-item label"任务类型" prop"TaskType"><el-radio-group v-model"form.TaskType" change"handleCh…

ThreadPoolExecutor

简述&#xff1a; 有的时候&#xff0c;系统处理很多任务&#xff0c;如何这些任务要是都是通过new Thread来做的话&#xff0c;系统就不得不常常的创建之后还要销毁Thread&#xff0c;这个是非常消耗时间而且还占用资源&#xff0c;所以我们通过创建线程池来管理我们的线程。 …

你总说时间很少

你总说时间很少 没时间看哭泣的骆驼 少了心情 你总说时间很少 没时间撩拨那爱的罗曼史 少了喜欢 你总说时间很少 没时间吮吸印度洋的水清沙白 少了勇敢 你总说时间很少 没时间寻找相伴的野马 少了感觉 可到最后 时间真的很少 有了喜欢 就少了心情 有了感觉 就少了勇敢…

Unity 将是驱动 C# 增长的引擎吗 ?

C# 在中国的采用需要一个杀手级应用的带动&#xff0c; 那么这样的一个杀手级应用是 Unity吗&#xff0c;我这里大胆推测采用CoreCLR 的新一代完全采用C#构建的Unity 将是这样的一个杀手级应用。Unity已被广泛应用于数字孪生、数字城市、数字工厂等场景&#xff0c;成为各产业加…

HTML5video 标签

属性 值 说明 autoplay autoplay 如果出现该属性&#xff0c;则视频在就绪后马上播放。 controls controls 如果出现该属性&#xff0c;则向用户显示控件&#xff0c;比如播放按钮。 preload preload 如果出现该属性&#xff0c;则视频…