调用摄像机
目标: 调用摄像机,并将结果显示在界面上
步骤:
1.声明一个图片资源路径
private Uri imageUri;
2.在layout.xml中创建一个ImageView,用来显示图片,并在AndroidManifest.xml中申请sdcard权限,用于保存拍摄的照片
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3.在onCreate()中创建一个图片文件,并获取路径
imageView=(ImageView)findViewById(R.id.imageView); imageUri=Uri.fromFile(new File(getExternalCacheDir(),"test.jpg"));
4.在按钮的点击事件中,启动摄像机,并保存拍摄结果
Intent intent=new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,1);
5.在onActivityResult回调方法中,将照片显示出来
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try { //将.jpg解析成bitmap对象 Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } }
调用相册
1.因为图片在sdcard中,所以要申请权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.在主线程中启动相册
Intent intent = new Intent("android.intent.action.GET_CONTENT"); intent.setType("image/*"); startActivityForResult(intent, 1); // 打开相册
3.如果要在相册选择图片,并显示在ImageView上
在4.4以下系统,使用以下代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); handleImageBeforeKitKat(data); } private void handleImageBeforeKitKat(Intent data) { Uri uri = data.getData(); String imagePath = getImagePath(uri, null); displayImage(imagePath); } private String getImagePath(Uri uri, String selection) { String path = null; // 通过Uri和selection来获取真实的图片路径 Cursor cursor = getContentResolver().query(uri, null, selection, null, null); if (cursor != null) { if (cursor.moveToFirst()) { path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); } cursor.close(); } return path; } private void displayImage(String imagePath) { if (imagePath != null) { Bitmap bitmap = BitmapFactory.decodeFile(imagePath); picture.setImageBitmap(bitmap); } else { Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show(); } }
在4.4以上系统,使用以下代码
private void handleImageOnKitKat(Intent data) { String imagePath = null; Uri uri = data.getData(); if (DocumentsContract.isDocumentUri(this, uri)) { // 如果是document类型的Uri,则通过document id处理 String docId = DocumentsContract.getDocumentId(uri); if("com.android.providers.media.documents".equals(uri.getAuthority())) { String id = docId.split(":")[1]; // 解析出数字格式的id String selection = MediaStore.Images.Media._ID + "=" + id; imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection); } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) { Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId)); imagePath = getImagePath(contentUri, null); } } else if ("content".equalsIgnoreCase(uri.getScheme())) { // 如果是content类型的Uri,则使用普通方式处理 imagePath = getImagePath(uri, null); } else if ("file".equalsIgnoreCase(uri.getScheme())) { // 如果是file类型的Uri,直接获取图片路径即可 imagePath = uri.getPath(); } displayImage(imagePath); // 根据图片路径显示图片 } private String getImagePath(Uri uri, String selection) { String path = null; // 通过Uri和selection来获取真实的图片路径 Cursor cursor = getContentResolver().query(uri, null, selection, null, null); if (cursor != null) { if (cursor.moveToFirst()) { path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); } cursor.close(); } return path; } private void displayImage(String imagePath) { if (imagePath != null) { Bitmap bitmap = BitmapFactory.decodeFile(imagePath); picture.setImageBitmap(bitmap); } else { Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show(); } }
相关推荐
移动端浏览器和手机APP,h5页面调用相机、相册、录像、录音,可以选择本地相册;以及文件的读取和加载方法, 调用FileReader对象的方法
android 调用系统相机相册兼容7.0
Qt调用安卓照相机,配合Qml和Java函数接口,照相机中技术包括摄像,打开相册,照相,播放摄像视频
最新版,Unity调用Android/IOS系统相册、摄像机,选取后可以裁剪(Demo)
Unity3d 调用Ios相册,对图片进行剪彩,然后加载图片到Unity3d RawImage上面,为unity3d 2018.3.0工程
拍照或者从相册中选择图片后,我们都可以直接或间接的得到Uri或源文件。 通过`imageView.setImageUri(uri)`不会引发图片方向不正确的问题。 但是通过`BitmapFactory.decodeFile();`将源文件解析成Bitmap后再...
使用Qt for android调用原生系统的摄像头来录取设备,稳定高效,使用于安卓7.0版本及以上,测试在魅族5.0会后台死掉,但是录像会成功
主要介绍了Android实现调用系统相册和拍照的Demo示例,实例分析了Android调用系统相册及拍照的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
基于google Zxing实现二维码的生成,识别和长按识别的效果,仿微信选择相册里的二维码图片直接识别的效果 ,选择相册在主页面点击打开摄像机进行扫描,进入扫描页面,在里面有选择相册的选项,直接点击就可以调用相册
unity与androidstudio调用摄像机 相册,裁剪,适合各种新人,欢迎下载~
uniAPP自己封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启,定位权限,摄像头权限,读写相机权限,麦克风权限,拨打电话权限
该资源是一个完整的Android应用,演示了如何在Android中利用Intent进行拍照、摄像、打电话、发短信、发邮件等
最近在做微信公众号网页开发,遇到两个需要用到微信的JSSDK,上传图片和自动定位,微信开发者文档有详细的步奏内容,链接点击进入微信开发者文档 ,也可以看看我这篇文章,看我是如何实现的。 首先第一步,需要在...
image组件有时候会消失,第二,整个流程实现起来很僵硬,页面跳转也是卡的要死,后来无意间发现了另一个API:wx.chooseImage,这个API会自己去调用相机和相册,之后的工作完全交给底层去实现,简直是简单到没朋友: ...