-
2018-10-13 12:07:42
逻辑部分:
package com.example.qing.third; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.provider.MediaStore; import android.support.annotation.Nullable; import android.support.v4.content.FileProvider; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class MainActivity extends AppCompatActivity { public static final int TAKE_PHOTO=1; private ImageView picture; private Uri imageUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button takePhoto=(Button)findViewById(R.id.take_photo); picture=(ImageView)findViewById(R.id.picture); takePhoto.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { File outputImage=new File(getExternalCacheDir(),"output_image.jpg"); try{ if(outputImage.exists()){ outputImage.delete(); } outputImage.createNewFile(); }catch (IOException e){ e.printStackTrace(); } if(Build.VERSION.SDK_INT>=24){ imageUri=FileProvider.getUriForFile(MainActivity.this,"com.example.cameraalbumtest.fileprovider",outputImage); } else{ imageUri=Uri.fromFile(outputImage); } Intent intent=new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,TAKE_PHOTO); } }); } @Override //使用的是startActivityForResult会有结果返回到onActivityResult方法中去 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { switch (requestCode){ case TAKE_PHOTO: if(resultCode==RESULT_OK){ try{ Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); picture.setImageBitmap(bitmap); }catch (FileNotFoundException e){ e.printStackTrace(); } } break; default: break; } } }
布局部分:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/take_photo" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="Show Photo" /> <ImageView android:id="@+id/picture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> </LinearLayout>
xml:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="my_images" path="" /> </paths>
更多相关内容 -
android studio调用摄像头拍摄获取条形码返回结果
2021-12-03 16:40:32android studio调用摄像头拍摄获取条形码返回结果 -
Android Studio调用摄像头
2018-11-20 21:22:34演示代码的功能,调用摄像头拍照,然后返回把所拍的照片显示出来 1、首先呢,我们先创建一个项目,然后修改一下布局文件activity_main.xml,ImageView是将拍照的图片显示出来: <?xml version="1.0"...演示代码的功能,调用摄像头拍照,然后返回把所拍的照片显示出来
1、首先呢,我们先创建一个项目,然后修改一下布局文件activity_main.xml,ImageView是将拍照的图片显示出来:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/take_photo" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="take photo" /> <ImageView android:id="@+id/picture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> </RelativeLayout>
然后开始处理调用摄像头的逻辑,编写MainActivity
File对象用来存放拍下的图片,GetUriForFile()方法接受3个参数。第一个是要求传入的Context对象,第二个是任意唯一的字符串,第三个是刚刚创建的File对象,调用Intent的putExtra()方法指定图片的输出地址,最后调用StartActivityForResult()来启动活动。package com.example.mrlee.camera; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.provider.MediaStore; import android.support.annotation.Nullable; import android.support.v4.content.FileProvider; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class MainActivity extends AppCompatActivity { public static final int TAKE_PHOTO = 1; private ImageView picture; private Uri imageUri; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button takephoto = findViewById(R.id.take_photo); picture = findViewById(R.id.picture); takephoto.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { File outputImage = new File(getExternalCacheDir(), "output_image.jpg"); try//判断图片是否存在,存在则删除在创建,不存在则直接创建 { if (outputImage.exists()) { outputImage.delete(); } outputImage.createNewFile(); } catch (IOException e) { e.printStackTrace(); } //判断运行设备的系统版本是否低于Android7.0 if (Build.VERSION.SDK_INT >= 24) { imageUri = FileProvider.getUriForFile(MainActivity.this, "com.example.cameraalbumtest.fileprovider", outputImage); } else { imageUri = Uri.fromFile(outputImage); } //使用隐示的Intent,调用摄像头,并把它存储 Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, TAKE_PHOTO); //调用会返回结果的开启方式,返回成功的话,则把它显示出来 } }); } protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { switch (requestCode) { case TAKE_PHOTO: if (resultCode == RESULT_OK) { try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); picture.setImageBitmap(bitmap); //将图片解析成Bitmap对象,并把它显现出来 } catch (FileNotFoundException e) { e.printStackTrace(); } } break; default: break; } } }
然后在AndroidMainfest.xml中队内容提供器进行注册
<provider android:authorities="com.example.cameraalbumtest.fileprovider" android:name="android.support.v4.content.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
@xml/file_paths资源还需要我们手动去创建,在res下创建一个xml目录,然后创建一个file_paths.xml文件, path的值表示共享的具体路劲,内容如下:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="my_images" path="" /> </paths>
最后呢我们还需要访问SD卡的权限,在AndroidMainfest.xml中加一行代码
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
这样就搞定啦,点击拍照,它会将拍下来的图片返回,然后通过ImageView显示出来。
具体细节请参见《第一行代码》
-
Android实现调用摄像头进行拍照功能
2020-08-27 15:32:04主要为大家详细介绍了Android实现调用摄像头进行拍照功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
使用Androidstudio调用摄像头拍照并保存照片
2021-05-29 12:20:48首先在manifest.xmlns文件中声明权限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... android:requestLegacyExternalStorage="true首先在manifest.xmlns文件中声明权限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.takephoto"> <application android:requestLegacyExternalStorage="true" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.TakePhoto"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <provider android:authorities="com.example.takephoto.fileprovider" android:name="androidx.core.content.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/> </provider> </application> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> </manifest>
在其中我们创建了一个文件夹,文件夹名字叫做xml,下面存放了file_paths这样一个文件
path.xml文件中存放的代码为
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="my_images" path="."/> </paths>
来到主方法中的布局文件,只需要简单的一个按钮就可以实现,为了将照片显示出来,添加一个imgview来将照片显示在手机上
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="📸" android:id="@+id/btn_takephoto"/> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/img_photo"/> </LinearLayout>
主方法中只需要将按钮的点击事件跳转到Android自带的系统相机就可以
package com.example.takephoto; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.FileProvider; import android.content.Intent; import android.content.RestrictionEntry; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class MainActivity extends AppCompatActivity { final int TAKE_PHOTO=1; ImageView iv_photo; Uri imageUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn_1=findViewById(R.id.btn_takephoto); iv_photo=findViewById(R.id.img_photo); btn_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { File output=new File(getExternalCacheDir(),"output_image.jpg"); try { if (output.exists()){ output.delete(); } output.createNewFile(); }catch (IOException e){ e.printStackTrace(); } if (Build.VERSION.SDK_INT>=24){ //图片的保存路径 imageUri= FileProvider.getUriForFile(MainActivity.this,"com.example.takephoto.fileprovider",output); } else { imageUri=Uri.fromFile(output);} //跳转界面到系统自带的拍照界面 Intent intent=new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,TAKE_PHOTO); } }); } protected void onActivityResult(int requestCode,int resultCode,Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode){ case TAKE_PHOTO: if (resultCode==RESULT_OK){ // 使用try让程序运行在内报错 try { //将图片保存 Bitmap bitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); iv_photo.setImageBitmap(bitmap); }catch (FileNotFoundException e){ e.printStackTrace(); } } break; default:break; } } }
运行效果:
点击按钮后:
选择确定后:
-
android studio调用摄像头拍照及具体步骤演示代码
2018-08-14 11:54:33演示代码的功能,调用摄像头拍照,成功的话则把照片显示出来。 第一步 定义一个按钮用于调用摄像头拍照,ImageView用于存放显示拍出的照片。 <Button android:id="@+id/take_photo" android:...演示代码的功能,调用摄像头拍照,成功的话则把照片显示出来。
第一步 定义一个按钮用于调用摄像头拍照,ImageView用于存放显示拍出的照片。
<Button android:id="@+id/take_photo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="take photo" /> <ImageView android:id="@+id/picture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" />
第二步 开始编写调用摄像头的具体逻辑
package example.com.test; //逻辑,先创建文件,之后把它封装成uri对象,之后封装带intent中,调用摄像头,之后调用过后会有一个 //返回结果,成功的话就把它显示出来 import android.content.Intent; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; import android.provider.MediaStore; import android.support.annotation.Nullable; import android.support.v4.content.FileProvider; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class MainActivity extends AppCompatActivity { public static final int TAKE_PHOTO=1;//声明一个请求码,用于识别返回的结果 private ImageView picture; private Uri imageUri; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button takephoto=findViewById(R.id.take_photo); picture=findViewById(R.id.picture); takephoto.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { File outputImage=new File(getExternalCacheDir(),"output_image.jpg"); /* 创建一个File文件对象,用于存放摄像头拍下的图片,我们把这个图片命名为output_image.jpg 并把它存放在应用关联缓存目录下,调用getExternalCacheDir()可以得到这个目录,为什么要 用关联缓存目录呢?由于android6.0开始,读写sd卡列为了危险权限,使用的时候必须要有权限, 应用关联目录则可以跳过这一步 */ try//判断图片是否存在,存在则删除在创建,不存在则直接创建 { if(outputImage.exists()) { outputImage.delete(); } outputImage.createNewFile(); } catch (IOException e) { e.printStackTrace(); } if(Build.VERSION.SDK_INT>=24) //判断安卓的版本是否高于7.0,高于则调用高于的方法,低于则调用低于的方法 //把文件转换成Uri对象 /* 之所以这样,是因为android7.0以后直接使用本地真实路径是不安全的,会抛出异常。 FileProvider是一种特殊的内容提供器,可以对数据进行保护 */ { imageUri= FileProvider.getUriForFile(MainActivity.this, "com.example.cameraalbumtest.fileprovider",outputImage); /* 第一个参数:context对象 第二个参数:任意唯一的字符串 第三个参数:文件对象 */ } else { imageUri=Uri.fromFile(outputImage); } //使用隐示的Intent,系统会找到与它对应的活动,即调用摄像头,并把它存储 Intent intent=new intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,TAKE_PHOTO); //调用会返回结果的开启方式,返回成功的话,则把它显示出来 } }); } //处理返回结果的函数,下面是隐示Intent的返回结果的处理方式,具体见以前我所发的intent讲解 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { switch (requestCode) { case TAKE_PHOTO: if(resultCode==RESULT_OK) { try { Bitmap bitmap= BitmapFactory.decodeStream(getContent- Resolver().openInputStream(imageUri)); picture.setImageBitmap(bitmap); //将图片解析成Bitmap对象,并把它显现出来 } catch (FileNotFoundException e) { e.printStackTrace(); } } break; default: break; } } }
第三步 刚刚我们提到了内容提供器,所以我们现在内容提供器在manifest.xml中进行注册,其中android:name的值是固定的,
android:authorities的值必须和FileProvider.getUriForFile的第二个参数是一致的,在这里面我们还利用了<meta-data来制定uri路径,并引用一个资源,当然这个资源还未创建,我们在第四步创建它。
<provider android:authorities="com.example.cameraalbumtest.fileprovider" android:name="android.support.v4.content.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
第四步 在res目录下创建一个xml目录,目录是directory,之后在这个目录下,创建一个xml源文件,修改代码如下:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="my_images" path=""/> </paths>
其中 <external-path用于指定uri共享的,名字可以随便填,path为空表示可以共享整个sd卡
第五步 为了兼容老版本的安卓系统,我们还是打算添加一条权限,用于声明访问sd卡的权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
android studio 调用相机拍照,选择相册照片
2018-12-07 09:27:50android studio 调用摄像头拍照或选择相册照片,拿到图片并存储图片 -
Android studio 中调用摄像头录像
2017-07-19 09:29:16请问哪位大神知道如何在Android studio 中调用摄像头录像,最好有代码,初学Android studio ,很多不懂,请大神指教! -
android studio 2.2源码之 利用自带摄像头,动态获取【人脸识别】,支持多人
2016-11-21 16:10:06Android studio 2.2源码之 利用自带摄像头,动态获取【人脸识别】,支持多人 是为了做一个识别人脸项目,找了很久才实现的DEMO资料,可以直接安装FaceDetection002\app\build\outputs\apk 下的APK进行体验 源码是 ... -
android调用摄像头实时预览
2017-06-19 10:33:34是在320*320屏幕,mdpi上的调用摄像头预览 -
在Android Studio上使用摄像头:使用相机的Kotlin Projecto
2021-02-15 10:17:46在Android Studio上使用摄像头:使用相机的Kotlin Projecto -
Android Studio《第一行代码》学习——调用摄像头和相册
2021-05-28 03:07:16调用摄像头和相册调用摄像头拍照1.修改布局文件2.编写调用摄像头的具体逻辑3.一个小小的问题调用相册1.修改布局文件2.加入调用相册的逻辑调用摄像头拍照在应用程序中调用摄像头是非常常见的功能,接下来就开启学习之... -
Android Zxing包 调用摄像头扫描
2018-10-19 09:30:57Android Zxing包 调用手机摄像头去进行条码扫描。目前我只试了一维码和二维码。 -
openCV集成到android,调用摄像头
2018-02-08 08:51:17讲android和opencv合拼一个项目,编译后的项目无需下载opencv。 -
AndroidStudio_安卓原生开发_Android中调用摄像头拍照_并剪裁图片---Android原生开发工作笔记138
2021-11-19 19:40:161.调用代码: openCamera(this); 2.粘贴以下代码实现拍照 public void openCamera(Activity activity) { //獲取系統版本 int currentapiVersion = android.os.Build.VERSION.SDK_INT; // 激活相机 Intent ... -
Android Studio 调用系统相机(超清)和相册的照片并显示在ImageView
2021-10-10 15:18:48拍照上传,2.从相册选择 ...uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 2.a -
android studio开发为什么一调用安卓摄像头app就自动退出,求大神指导
2020-08-27 15:58:28if (url.trim().startsWith("tel")) {//特殊情况tel,调用系统的拨号软件拨号【<a href="tel:1111111111">1111111111】 Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); start... -
Android使用WebView调用H5完成摄像头扫描二维码
2020-11-04 11:14:46Android APP使用WebView调用H5页面完成摄像头扫描二维码 项目使用Android Studio,打开项目可以直接运行,用过的都说好:) -
Android webview调用摄像头扫描二维码
2016-10-13 15:48:11直接下载可以运行, android studio 工具开发, webview引用的本地页面 或者远程页面调用android 摄像头, 通过zxing解析包 进行二维码解析 -
Android Studio使用opencv打开摄像头.java以及.xml
2017-05-14 15:38:46本资源只包含两个重要文件,活动文件与界面文件,包含使用opencv打开摄像头部分,而且解决使用opencv打开摄像头会旋转90度的问题,解决办法仅供参考。 -
Android Studio调用USB摄像头
2019-07-15 16:54:12proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } //添加内容 repositories { flatDir { dirs 'libs' } } } dependencies { implementation fileTree(dir: '... -
关于使用Android studio调取系统相机拍照时闪退
2022-05-19 22:07:53每次使用Android studio调取系统摄像头都给我闪退,无意中发现是使用了 <uses-permission android:name="android.permission.CAMERA" /> 这条是看CSDN其他帖子这么写加上的,结果根源恰恰在这里。应该是版本... -
AndroidStudio学习(七):调用摄像头拍照/从相册中选择照片
2020-06-24 15:50:56调用摄像头拍照 //activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:... -
android调用摄像头录像的代码(录像并生成mp4文件)
2021-07-29 11:47:59import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; ... -
Android编程调用Camera和相册功能详解
2020-08-31 06:54:39主要介绍了Android编程调用Camera和相册功能,结合实例形式分析了Android的拍照及相册调用功能相关实现技巧与操作注意事项,需要的朋友可以参考下