简单的 Android 拍照并显示以及获取路径后上传

Activity 中的代码,我只贴出重要的事件部分代码

  1. public void doPhoto(View view)
  2. {
  3. destoryBimap();
  4. String state = Environment.getExternalStorageState();
  5. if (state.equals(Environment.MEDIA_MOUNTED)) {
  6. Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
  7. startActivityForResult(intent, 1);
  8. } else {
  9. Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_LONG).show();
  10. }
  11. }
  12.  
  13. @Override
  14. protected void onActivityResult(int requestCode, int resultCode, Intent data)
  15. {
  16. Uri uri = data.getData();
  17. if (uri != null) {
  18. this.photo = BitmapFactory.decodeFile(uri.getPath());
  19. }
  20. if (this.photo == null) {
  21. Bundle bundle = data.getExtras();
  22. if (bundle != null) {
  23. this.photo = (Bitmap) bundle.get("data");
  24. } else {
  25. Toast.makeText(MainActivity.this, "拍照失败", Toast.LENGTH_LONG).show();
  26. return;
  27. }
  28. }
  29.  
  30. FileOutputStream fileOutputStream = null;
  31. try {
  32. // 获取 SD 卡根目录
  33. String saveDir = Environment.getExternalStorageDirectory() + "/meitian_photos";
  34. // 新建目录
  35. File dir = new File(saveDir);
  36. if (! dir.exists()) dir.mkdir();
  37. // 生成文件名
  38. SimpleDateFormat t = new SimpleDateFormat("yyyyMMddssSSS");
  39. String filename = "MT" + (t.format(new Date())) + ".jpg";
  40. // 新建文件
  41. File file = new File(saveDir, filename);
  42. // 打开文件输出流
  43. fileOutputStream = new FileOutputStream(file);
  44. // 生成图片文件
  45. this.photo.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
  46. // 相片的完整路径
  47. this.picPath = file.getPath();
  48. ImageView imageView = (ImageView) findViewById(R.id.showPhoto);
  49. imageView.setImageBitmap(this.photo);
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. } finally {
  53. if (fileOutputStream != null) {
  54. try {
  55. fileOutputStream.close();
  56. } catch (Exception e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. }
  61. }
  62.  
  63. /**
  64. * 销毁图片文件
  65. */
  66. private void destoryBimap()
  67. {
  68. if (photo != null && ! photo.isRecycled()) {
  69. photo.recycle();
  70. photo = null;
  71. }
  72. }

Layout 布局页面

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:orientation="vertical"
  5. >
  6. <ScrollView
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent"
  9. >
  10. <LinearLayout
  11. android:layout_width="fill_parent"
  12. android:layout_height="fill_parent"
  13. android:orientation="vertical"
  14. >
  15. <Button
  16. android:id="@+id/doPhoto"
  17. android:layout_width="fill_parent"
  18. android:layout_height="wrap_content"
  19. android:padding="10dp"
  20. android:layout_marginBottom="10dp"
  21. android:text="拍照"
  22. android:onClick="doPhoto"
  23. />
  24. <TextView
  25. android:id="@+id/showContent"
  26. android:layout_width="fill_parent"
  27. android:layout_height="wrap_content"
  28. android:layout_marginBottom="10dp"
  29. />
  30. <ImageView
  31. android:id="@+id/showPhoto"
  32. android:layout_width="fill_parent"
  33. android:layout_height="250dp"
  34. android:scaleType="centerCrop"
  35. android:src="@drawable/add"
  36. android:layout_marginBottom="10dp"
  37. />
  38. </LinearLayout>
  39. </ScrollView>
  40. </LinearLayout>

其中的上传工具类请查看该文章:

http://blog.csdn.net/zhouzme/article/details/18952053

简单的 Android 拍照并显示以及获取路径后上传的更多相关文章

  1. 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  2. 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  3. Springboot框架中request.getInputStream()获取不到上传的文件流

    Springboot框架中用下面的代码,使用request.getInputStream()获取不到上传的文件流 @PostMapping("/upload_img") publi ...

  4. Android 拍照或者从相册获取图片的实现

    我们常常会用到上传头像,或者发帖子的时候选择本地图片上传的功能.这个很常见 今天因为app的需求我研究了下.现在分享下. 其实不论是通过拍照还是从相册选取都会用到Intent 这是系统提供给我们用来调 ...

  5. Android拍照和从相册获取照片

    1.从相册获取照片 private void openAlumb() { //mRxPermissions:三方权限库 mRxPermissions .request(Manifest.permiss ...

  6. Android获取通讯录并上传(包含通讯录加密)

    好久没更新文章了,近期在做通讯录上传,把它分享出来,送给需要的朋友. 写了一个通讯录工具类,直接放代码吧,关键位置通过注释来解释. 这个工具类包含通讯录获取,加密,然后上传操作.看不懂的可以留言 im ...

  7. Android上传图片到PHP服务器并且支持浏览器上传文件(word、图片、音乐等)

    暑假已经过了一半了,这才完成计划当中的第二个任务.虽然进度是慢了点.但也算是暑假的收获吧.下面我就把我学习当中的收获记录在此. 还是跟以往一样,先上图片. 操作的步骤:打开程序---->选择上传 ...

  8. (转)Android学习-使用Async-Http实现图片压缩并上传功能

    (转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一 ...

  9. Android学习笔记_13_网络通信之多个上传文件

    一.获取HTTP协议: 建立一个Web项目,建立一个如下所示的jsp界面,用IE捕获表单提交信息. <%@ page language="java" contentType= ...

随机推荐

  1. Factory Pattern(工厂模式)

    1.工厂模式简介 工厂模式,专门负责将大量有共同接口的类实例化(用来生产对象).其定义为定义一个用于创建对象的接口,让子类决定实例化那一个类.工厂方法使一个类的实例化延迟到其子类. 工厂模式拥有以下几 ...

  2. angularjs 中的iframe 标签 ng-src 路径

    如果直接写路径到iframe标签里的ng-src中会出现报错: 解决方法: 1.ng里面有个属性是专门用来解决跨域问题的 $sce. 用法: $scope.someUrl = $sce.trustAs ...

  3. python3中字典的copy

    字典是可变的: first和second同时指向一个字典.first修改也会影响second.在程序中一定注意对字典参数的修改会对原始的字典进行修改.这也体现了字典是可变的. 字典的copy方法是浅拷 ...

  4. angular-ui-bootstrap插件API - Pagination

    Pagination: 案例 <!DOCTYPE html> <html lang="en" ng-app="myApp"> <h ...

  5. redis配置文件redis.conf的参数说明

    打开redis.conf文件: # By default Redis does not run as a daemon. Use 'yes' if you need it. # Note that R ...

  6. [HMLY]3.如何使用Xcode Targets管理开发和生产版本?

    本文原地址:http://www.appcoda.com/using-xcode-targets/ 在开始此教程之前,我们假设你已经完成了应用程序的开发和测试,现在准备提交生产发布.问题是,某些web ...

  7. 驱动相关Error

    驱动中 fltKernel.h报 EPROCESS和PETHREAD重定义异常解决办法 驱动编写中经常会莫名出现 error C2371: 'PEPROCESS' : redefinition; di ...

  8. 【Python】协程实现生产者消费者模型

    协程的实现为协作式而非抢占式的,这是和进程线程的最大区别.在Python中,利用yield和send可以很容易实现协程. 首先复习下生成器. 如果一个函数使用了yield语句,那么它就是一个生成器函数 ...

  9. jar中没有主清单属性

    在导出jar时指定主类位置 或手动配置jar包中的MANIFEST.MF文件: 添加Main-Class: gui 参考: JAVA环境变量 CLASSPATH .;%JAVA_HOME%\lib\d ...

  10. C# Oracle insert 中文乱码

    问题描述: 在PL SQL中insert 中文数据,显示不乱码,通过后台insert的中文数据,显示问号. 解决分三步: 1.Select userenv('language') from dual; ...