首页 Android调用手机拍照以及从相册选择照片

Android调用手机拍照以及从相册选择照片

举报
开通vip

Android调用手机拍照以及从相册选择照片Android调用手机拍照以及从相册选择照片 文章分类:移动开发 Java代码 1./*用来标识请求照相功能的activity*/ 2. private static final int CAMERA_WITH_DATA = 3023; 3. 4. /*用来标识请求gallery的activity*/ 5. private static final int PHOTO_PICKED_WITH_DATA = 3021; 6. 7. /*拍照的照片存储位置*/ 8. private static fin...

Android调用手机拍照以及从相册选择照片
Android调用手机拍照以及从相册选择照片 文章分类:移动开发 Java代码 1./*用来标识请求照相功能的activity*/ 2. private static final int CAMERA_WITH_DATA = 3023; 3. 4. /*用来标识请求gallery的activity*/ 5. private static final int PHOTO_PICKED_WITH_DATA = 3021; 6. 7. /*拍照的照片存储位置*/ 8. private static final File PHOTO_DIR = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera"); 9. 10. private File mCurrentPhotoFile;//照相机拍照得到的图片 /*用来标识请求照相功能的activity*/ private static final int CAMERA_WITH_DATA = 3023; /*用来标识请求gallery的activity*/ private static final int PHOTO_PICKED_WITH_DATA = 3021; /*拍照的照片存储位置*/ private static final File PHOTO_DIR = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera"); private File mCurrentPhotoFile;//照相机拍照得到的图片 Java代码 1.private void doPickPhotoAction() { 2. Context context = EditContact.this; 3. 4. // Wrap our context to inflate list items using correct theme 5. final Context dialogContext = new ContextThemeWrapper(context, 6. android.R.style.Theme_Light); 7. String cancel="返回"; 8. String[] choices; 9. choices = new String[2]; 10. choices[0] = getString(R.string.take_photo); //拍照 11. choices[1] = getString(R.string.pick_photo); //从相册中选择 12. final ListAdapter adapter = new ArrayAdapter(dialogContext, 13. android.R.layout.simple_list_item_1, choices); 14. 15. final AlertDialog.Builder builder = new AlertDialog.Builder( 16. dialogContext); 17. builder.setTitle(R.string.attachToContact); 18. builder.setSingleChoiceItems(adapter, -1, 19. new DialogInterface.OnClickListener() { 20. public void onClick(DialogInterface dialog, int which) { 21. dialog.dismiss(); 22. switch (which) { 23. case 0:{ 24. String status=Environment.getExternalStorageState(); 25. if(status.equals(Environment.MEDIA_MOUNTED)){//判断是否有SD卡 26. doTakePhoto();// 用户点击了从照相机获取 27. } 28. else{ 29. showToast("没有SD卡"); 30. } 31. break; 32. 33. } 34. case 1: 35. doPickPhotoFromGallery();// 从相册中去获取 36. break; 37. } 38. } 39. }); 40. builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() { 41. 42. @Override 43. public void onClick(DialogInterface dialog, int which) { 44. dialog.dismiss(); 45. } 46. 47. }); 48. builder.create().show(); 49. } 50. } 51. 52. /** 53. * 拍照获取图片 54. * 55. */ 56. protected void doTakePhoto() { 57. try { 58. // Launch camera to take photo for selected contact 59. PHOTO_DIR.mkdirs();// 创建照片的存储目录 60. mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());// 给 新照的照片文件命名 61. final Intent intent = getTakePickIntent(mCurrentPhotoFile); 62. startActivityForResult(intent, CAMERA_WITH_DATA); 63. } catch (ActivityNotFoundException e) { 64. Toast.makeText(this, R.string.photoPickerNotFoundText, 65. Toast.LENGTH_LONG).show(); 66. } 67. } 68. 69. public static Intent getTakePickIntent(File f) { 70. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null); 71. intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 72. return intent; 73. } 74. 75. /** 76. * 用当前时间给取得的图片命名 77. * 78. */ 79. private String getPhotoFileName() { 80. Date date = new Date(System.currentTimeMillis()); 81. SimpleDateFormat dateFormat = new SimpleDateFormat( 82. "'IMG'_yyyy-MM-dd HH:mm:ss"); 83. return dateFormat.format(date) + ".jpg"; 84. } 85. 86. // 请求Gallery程序 87. protected void doPickPhotoFromGallery() { 88. try { 89. // Launch picker to choose photo for selected contact 90. final Intent intent = getPhotoPickIntent(); 91. startActivityForResult(intent, PHOTO_PICKED_WITH_DATA); 92. } catch (ActivityNotFoundException e) { 93. Toast.makeText(this, R.string.photoPickerNotFoundText1, 94. Toast.LENGTH_LONG).show(); 95. } 96. } 97. 98. // 封装请求Gallery的intent 99. public static Intent getPhotoPickIntent() { 100. Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 101. intent.setType("image/*"); 102. intent.putExtra("crop", "true"); 103. intent.putExtra("aspectX", 1); 104. intent.putExtra("aspectY", 1); 105. intent.putExtra("outputX", 80); 106. intent.putExtra("outputY", 80); 107. intent.putExtra("return-data", true); 108. return intent; 109. } 110. 111. // 因为调用了Camera和Gally所以要判断他们各自的返回情况,他们启动时是这样 的startActivityForResult 112. protected void onActivityResult(int requestCode, int resultCode, Intent data) { 113. if (resultCode != RESULT_OK) 114. return; 115. switch (requestCode) { 116. case PHOTO_PICKED_WITH_DATA: {// 调用Gallery返回的 117. final Bitmap photo = data.getParcelableExtra("data"); 118. // 下面就是显示照片了 119. System.out.println(photo); 120. //缓存用户选择的图片 121. img = getBitmapByte(photo); 122. mEditor.setPhotoBitmap(photo); 123. System.out.println("set new photo"); 124. break; 125. } 126. case CAMERA_WITH_DATA: {// 照相机程序返回的,再次调用图片剪辑程序 去修剪图片 127. doCropPhoto(mCurrentPhotoFile); 128. break; 129. } 130. } 131. } 132. 133. protected void doCropPhoto(File f) { 134. try { 135. // 启动gallery去剪辑这个照片 136. final Intent intent = getCropImageIntent(Uri.fromFile(f)); 137. startActivityForResult(intent, PHOTO_PICKED_WITH_DATA); 138. } catch (Exception e) { 139. Toast.makeText(this, R.string.photoPickerNotFoundText, 140. Toast.LENGTH_LONG).show(); 141. } 142. } 143. 144. /** 145. * Constructs an intent for image cropping. 调用图片剪辑程序 146. */ 147. public static Intent getCropImageIntent(Uri photoUri) { 148. Intent intent = new Intent("com.android.camera.action.CROP"); 149. intent.setDataAndType(photoUri, "image/*"); 150. intent.putExtra("crop", "true"); 151. intent.putExtra("aspectX", 1); 152. intent.putExtra("aspectY", 1); 153. intent.putExtra("outputX", 80); 154. intent.putExtra("outputY", 80); 155. intent.putExtra("return-data", true); 156. return intent; 157. }
本文档为【Android调用手机拍照以及从相册选择照片】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_737483
暂无简介~
格式:doc
大小:24KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-09-02
浏览量:18