主要思路:调用照相机拍照,然后为拍得的照片在SD卡新开一个储存照片的文件,然后在onActivityResult中进行照片显示

1、因为要调用照相机和SD卡所以需要在manifest.xml中添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--获取sd卡写的权限,用于文件上传和下载-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

如果app只运行在6.0以下系统的手机,只需要在manifest.xml中添加权限即可。

如果app也需要运行在6.0及以上系统的手机,那么除了在manifest.xml中添加权限外,还需要动态获取权限。动态请求权限的具体操作,百度即可。

2、布局文件

<LinearLayoutandroid:layout_width="match_parent"android:layout_height="@dimen/view_height_70"android:background="@color/white"android:orientation="horizontal"><ImageViewandroid:id="@+id/iv_btn_camera"android:layout_width="@dimen/view_width_60"android:layout_height="@dimen/view_height_60"android:layout_gravity="center_vertical"android:src="@drawable/icon_add_pic_80" /><ImageViewandroid:id="@+id/iv_showPic"android:layout_width="@dimen/view_width_60"android:layout_height="@dimen/view_height_60" />
</LinearLayout>

3、Activity类

public class EditBookActivity extends BaseActivity {private ImageView iv_btn_camera;public static final int REQUEST_CODE = 10;private File file1 = null;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_add_order_parent);initElement();setElement();}/*** 初始化控件*/private void initElement() {iv_btn_camera = (ImageView) findViewById(R.id.iv_btn_camera);}/*** 配置控件*/private void setElement() {iv_btn_camera.setOnClickListener(onClickListener);}/*** 控件点击事件*/private View.OnClickListener onClickListener = new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.iv_btn_camera:if (ContextCompat.checkSelfPermission(EditBookActivity.this, Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(EditBookActivity.this, new String[]{Manifest.permission.CAMERA}, 1);} else {String state = Environment.getExternalStorageState();if (state.equals(Environment.MEDIA_MOUNTED)) {String appName = getAppName(EditBookActivity.this);String path = Environment.getExternalStorageDirectory().getPath();File file = new File(path + "/" + appName);if (!file.exists()) {if (!file.mkdirs()) {Toast.makeText(EditBookActivity.this, "创建目录失败!", Toast.LENGTH_SHORT).show();}}file1 = new File(file.getAbsolutePath(), "/" + "服饰" + ".jpg");Uri uri = getUriForFile(EditBookActivity.this, file1);Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);startActivityForResult(intent, 1);} else {Toast.makeText(EditBookActivity.this, "未找到存储卡!", Toast.LENGTH_SHORT).show();}}break;default:break;}}};@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == RESULT_OK && requestCode == 1) {BitmapFactory.Options options = new BitmapFactory.Options();options.inSampleSize = 2;options.inJustDecodeBounds = false;Bitmap bmp = BitmapFactory.decodeFile(file1.getAbsolutePath(), options);iv_showPic.setImageBitmap(bmp);iv_showPic.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {try {Uri u = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(),file1.getAbsolutePath(), null, null));Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(u);startActivity(intent);} catch (FileNotFoundException e) {Toast.makeText(MemberMainActivity.this, "文件未找到!", Toast.LENGTH_SHORT).show();}}});}}/*** 启动EditBookActivity ** @param context 上下文*/public static void startActivity(Context context) {Intent intent = new Intent();intent.setClass(context, EditBookActivity.class);context.startActivity(intent);}/*** 请求权限后处理** @param requestCode  请求code* @param permissions  权限* @param grantResults 返回结果*/@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {String state = Environment.getExternalStorageState();if (state.equals(Environment.MEDIA_MOUNTED)) {String appName = getAppName(EditBookActivity.this);String path = Environment.getExternalStorageDirectory().getPath();File file = new File(path + "/" + appName);if (!file.exists()) {if (!file.mkdirs()) {Toast.makeText(EditBookActivity.this, "创建目录失败!", Toast.LENGTH_SHORT).show();}}file1 = new File(file.getAbsolutePath(), "/" + "服饰" + ".jpg");Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file1));startActivityForResult(intent, 1);} else {Toast.makeText(EditBookActivity.this, "未找到存储卡!", Toast.LENGTH_SHORT).show();}} else {Toast.makeText(this, "开通权限失败,请前往设置开通权限", Toast.LENGTH_SHORT).show();}break;default:break;}}@Overrideprotected void onRestart() {super.onRestart();}@Overrideprotected void onDestroy() {super.onDestroy();if (file1 != null) {if (file1.exists()) {file1.delete();}}}
}

4、getAppName()方法

/*** 获取App名** @param context 上下文* @return appName*/
public static String getAppName(Context context) {String label = null;try {PackageManager packageManager = context.getPackageManager();ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0);label = packageManager.getApplicationLabel(applicationInfo).toString();} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}return label;
}

Android开发 :调用系统相机拍照保存照片并显示在当前界面相关推荐

  1. Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题

    Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题 1.调用相机,兼容7.0 AndroidManifest配置 <providera ...

  2. android代码调用相机,Android如何调用系统相机拍照

    本文实例为大家分享了Android调用系统相机拍照的具体代码,供大家参考,具体内容如下 /** * 调用系统相机 */ private void takePhoto() { Uri uri = nul ...

  3. Android手机调用系统相机拍照、裁剪以及获取Url上传图片

    前言 最近一个人在公司搞独立开发,遇到问题只能自己解决,虽然过程比较坎坷,但是收获还是颇多的,一个人也是要坚强滴,最近弄用户的头像遇到了一些小问题,虽然上一款应用有头像上传,但是发现了其中的一些小问题 ...

  4. android 调用系统相机拍照保存,android 调用系统照相机,保存后回到前一个activity...

    private static final int RESULT_CAPTURE_IMAGE = 1; 把下面这段放到oncrate 或者按钮事件函数中 Intent imageCaptureInten ...

  5. android 相机拍照返回,Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题...

    版权声明:本文为博主原创文章,未经博主允许不得转载. 正常情况下调用系统相机拍照: 如果拍照后点击的是"确定"图标,返回的resultCode = -1(Activity.RESU ...

  6. Android调用系统相机拍照并保存到指定位置

    Android调用系统相机拍照并保存到指定位置 @Click(R.id.btn_takePhoto)void onclick() {Intent intent = new Intent(MediaSt ...

  7. android拍照保存到系统相册,调用系统相机拍照,并且保存到系统相册的一般套路...

    最近遇到也一个需求:调用系统相机拍照,并且照片可以在系统相册显示. 关于照片显示在系统相册这个问题,因为安卓机型太多了,各大厂商都对原生系统进行了不同程度的定制,所以在一般情况下,有的手机会把图片直接 ...

  8. android固定位置拍照,Android调用系统相机拍照并保存到指定位置

    Android调用系统相机拍照并保存到指定位置 @Click(R.id.btn_takePhoto) void onclick() { Intent intent = new Intent(Media ...

  9. 完美调用系统相机拍照,获取图片进行压缩并本地保存

    在android开发中,调用相机的功能的频幕可谓相当之高,尤其在当前社交应用五花八门的情况下,相机的功能被开发的相当丰富,如美颜相机,美拍,微拍和最早的360相机等,可是制造多少"美女&qu ...

最新文章

  1. 面试看缘分php,php测试姓名缘分指数
  2. Snap和Flatpak 通吃所有发行版的打包方式。
  3. error: 'release' is unavailable: not available in automatic reference counting,该怎么解决
  4. python pip国内镜像
  5. 如何用视频云技术,搞一个爆红的 “反应视频” 项目?
  6. Java Spring源代码研究之Bean的名称是大小写相关吗?
  7. CDMA系统的三种码
  8. [Azure][PowerShell][ASM][12]ACL
  9. python用于人工智能哪些领域_Python那么火?哪些领域可以用它?
  10. 使用反射获得jar包中的类、方法、参数、返回值类型,然后动态加载jar包运行方法
  11. MySQL 基本信息的查询(初始化配置信息 my.ini)
  12. 这个春天我能感觉的到
  13. houseprice_analysis_广州房子租售比分析(上)
  14. 360服务器linux版,360浏览器Linux版
  15. web前端面试之基础面试题(一)(含答案)
  16. 【从0开始音乐demo的制作:预计耗时15小时(二)】简单的页面
  17. 压摆率和上升时间的区别
  18. 小故事有大能量(爱情故事)
  19. CD 20 打气球的最大分数
  20. matlab 实现低通巴特沃斯滤波器、切比雪夫1型/2型滤波器 和 椭圆滤波器

热门文章

  1. myAppointment OPA test case issue
  2. 太阳能热水器两芯液位温度检测
  3. 【超详细教程】Mac如何用QuickTime录屏soundflower录制屏内外声音(附视频演示教程)
  4. c语言将结果原模原样输出到文件,用c语言处理文件
  5. Liunx 用户权限之ALC
  6. red hart linux中文,hart是什么意思_hart的翻译_音标_读音_用法_例句_爱词霸在线词典...
  7. django orm基本操作一
  8. 江苏计算机二级24c语言,闽高校计算机等级考试信息技术选择题(含问题详解)确定书中页码版.doc...
  9. 神州八号明日清晨发射
  10. 大数据周会-本周学习内容总结03