文档章节

android 从相机或者相册获取照片!

 天下杰论
发布于 2013/02/05 18:09
字数 730
阅读 107
收藏 0

最近项目用到调用相机,给出代码,只是调用的android api 给的接口 上代码:


1.  ackage com.ray.test; 

2.   

3.  import android.app.Activity; 

4.  import android.app.AlertDialog; 

5.  import android.content.ActivityNotFoundException; 

6.  import android.content.Context; 

7.  import android.content.DialogInterface; 

8.  import android.content.Intent; 

9.  import android.database.Cursor; 

10. import android.net.Uri; 

11. import android.os.Bundle; 

12. import android.os.Environment; 

13. import android.provider.MediaStore; 

14. import android.util.Log; 

15. import android.view.ContextThemeWrapper; 

16. import android.view.View; 

17. import android.view.View.OnClickListener; 

18. import android.widget.ArrayAdapter; 

19. import android.widget.Button; 

20. import android.widget.ImageView; 

21. import android.widget.ListAdapter; 

22. import android.widget.Toast; 

23.  

24. public class TestPhotoActivity extends Activity implements OnClickListener 

25. { 

26.  

27.     private static final String TAG = "TestPhotoActivity"; 

28.  

29.     /* 用来标识请求照相功能的activity */ 

30.     private static final int CAMERA_WITH_DATA = 3023; 

31.  

32.     /* 用来标识请求gallery的activity */ 

33.     private static final int PHOTO_PICKED_WITH_DATA = 3021; 

34.  

35.     Button buttonOK; 

36.  

37.     ImageView imageViewPhoto; 

38.  

39.     /** Called when the activity is first created. */ 

40.     @Override 

41.     public void onCreate(Bundle savedInstanceState) 

42.     { 

43.         super.onCreate(savedInstanceState); 

44.         setContentView(R.layout.main); 

45.         buttonOK = (Button) findViewById(R.id.ButtonOK); 

46.  

47.         imageViewPhoto = (ImageView) findViewById(R.id.imageViewPhoto); 

48.  

49.         buttonOK.setOnClickListener(this); 

50.  

51.     } 

52.  

53.     @Override 

54.     public void onClick(View v) 

55.     { 

56.         // TODO Auto-generated method stub 

57.         switch (v.getId()) 

58.         { 

59.             case R.id.ButtonOK: 

60.  

61.                 doPickPhotoAction(); 

62.                 break; 

63.  

64.             default: 

65.                 break; 

66.         } 

67.  

68.     } 

69.  

70.     private void doPickPhotoAction() 

71.     { 

72.         Context context = TestPhotoActivity.this; 

73.  

74.         // Wrap our context to inflate list items using correct theme 

75.         final Context dialogContext = new ContextThemeWrapper(context, 

76.             android.R.style.Theme_Light); 

77.         String cancel = "返回"; 

78.         String[] choices; 

79.         choices = new String[2]; 

80.         choices[0] = getString(R.string.take_photo); //拍照 

81.         choices[1] = getString(R.string.pick_photo); //从相册中选择 

82.         final ListAdapter adapter = new ArrayAdapter<String>(dialogContext, 

83.             android.R.layout.simple_list_item_1, choices); 

84.  

85.         final AlertDialog.Builder builder = new AlertDialog.Builder( 

86.             dialogContext); 

87.         builder.setTitle(R.string.attachToContact); 

88.         builder.setSingleChoiceItems(adapter, -1, 

89.             new DialogInterface.OnClickListener() 

90.             { 

91.                 public void onClick(DialogInterface dialog, int which) 

92.                 { 

93.                     dialog.dismiss(); 

94.                     switch (which) 

95.                     { 

96.                         case 0: 

97.                         { 

98.                             String status = Environment 

99.                                 .getExternalStorageState(); 

100.                             if (status.equals(Environment.MEDIA_MOUNTED)) 

101.                             {//判断是否有SD卡 

102.                                 doTakePhoto();// 用户点击了从照相机获取 

103.                             } 

104.                             else 

105.                             { 

106.                                 Toast.makeText(TestPhotoActivity.this, "没有SD卡", 

107.                                     Toast.LENGTH_LONG).show(); 

108.                             } 

109.                             break; 

110.                         } 

111.                         case 1: 

112.                             doPickPhotoFromGallery();// 从相册中去获取 

113.                             break; 

114.                     } 

115.                 } 

116.             }); 

117.         builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() 

118.         { 

119.  

120.             @Override 

121.             public void onClick(DialogInterface dialog, int which) 

122.             { 

123.                 dialog.dismiss(); 

124.             } 

125.  

126.         }); 

127.         builder.create().show(); 

128.     } 

129.  

130.     /**

131.      * 拍照获取图片

132.      * 

133.      */ 

134.     protected void doTakePhoto() 

135.     { 

136.         try 

137.         { 

138.             Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null); 

139.             //直接使用,没有缩小 

140.             startActivityForResult(intent, CAMERA_WITH_DATA); 

141.         } 

142.         catch (ActivityNotFoundException e) 

143.         { 

144.             Toast.makeText(this, R.string.photoPickerNotFoundText, 

145.                 Toast.LENGTH_LONG).show(); 

146.         } 

147.     } 

148.  

149.     // 请求Gallery程序 

150.     protected void doPickPhotoFromGallery() 

151.     { 

152.         try 

153.         { 

154.  

155.             final Intent intent = getPhotoPickIntent(); 

156.  

157.             startActivityForResult(intent, PHOTO_PICKED_WITH_DATA); 

158.  

159.         } 

160.         catch (ActivityNotFoundException e) 

161.         { 

162.             Toast.makeText(this, R.string.photoPickerNotFoundText1, 

163.                 Toast.LENGTH_LONG).show(); 

164.         } 

165.     } 

166.  

167.     //    // 封装请求Gallery的intent 

168.     public static Intent getPhotoPickIntent() 

169.     { 

170.         Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); 

171.         intent.setType("image/*"); 

172.  

173.         return intent; 

174.     } 

175.  

176.     // 因为调用了Camera和Gally所以要判断他们各自的返回情况,他们启动时是这样的startActivityForResult 

177.     protected void onActivityResult(int requestCode, int resultCode, Intent data) 

178.     { 

179.         if (resultCode != RESULT_OK) 

180.             return; 

181.         switch (requestCode) 

182.         { 

183.             case PHOTO_PICKED_WITH_DATA: 

184.  

185.                 Uri uri = data.getData(); 

186.  

187.                 String selectedImagePath = getPath(uri); 

188.  

189.                 Log.e(TAG, "1111111111" + selectedImagePath); 

190.                 // 

191.                 imageViewPhoto.setImageURI(uri); 

192.  

193.                 break; 

194.  

195.             case CAMERA_WITH_DATA: 

196.  

197.                 Uri uri1 = data.getData(); 

198.  

199.                 Log.e(TAG, uri1.toString()); 

200.                 // 

201.                 String selectedImagePath1 = getPath(uri1); 

202.                 Log.e(TAG, "1111111111" + selectedImagePath1); 

203.                 imageViewPhoto.setImageURI(uri1); 

204.  

205.                 break; 

206.  

207.         } 

208.     } 

209.  

210.     public String getPath(Uri uri) 

211.     { 

212.         String[] projection = {MediaStore.Images.Media.DATA }; 

213.         Cursor cursor = managedQuery(uri, projection, null, null, null); 

214.         int column_index = cursor 

215.             .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 

216.         cursor.moveToFirst(); 

217.         return cursor.getString(column_index); 

218.     } 

219. } 


本文转载自:http://www.2cto.com/kf/201201/116385.html

共有 人打赏支持
粉丝 54
博文 450
码字总数 24615
作品 0
沈阳
项目经理
私信 提问
android 系统相机拍照 照片路径

android开发时,调用android系统相机拍完照片后,怎么同时获取该照片的路径呢 我没有另外保存照片到其他地方,所以在系统相册,我应该怎样获取带照片名的路径呢 如果单独从相册在获取的话 是...

xyh_cx
2016/06/30
274
1
关于调用Android照相功能获取图片

最近在项目中调用相机,使用了别人写好的文件,但发现获取的照片没真正使用系统照相拍照再查看那么清晰,于是研究了一下,发现通常调用照相功能获取的图片都是被压缩的,如果要获取原照,那得...

tyronejw
2015/08/18
0
0
Android Camera了解一下

今天我们来了解下Android Camera的一些基本知识,包括下面一些内容 调用设备的相机app拍摄照片 调用设备的相机app拍摄视频 通过相机api拍摄照片和视频 1.调用设备的相机app拍摄照片 先看下效...

juexingzhe
2018/11/23
0
0
项目需求讨论 - WebView下拍照及图片选择功能

前言: 如果觉得掘金上看图片放大看不清楚,可以跳到另外的同步发布的链接看,放大图片下部有个可以查看原图功能,很清楚:项目需求讨论 - WebView下拍照及图片选择功能 现在很多app里面,都...

青蛙要fly
2018/06/23
0
0
组长问我几天能开发一个人见人爱的百万量级Android相机,我是这样回答的...

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ空间开发团队发表于云+社区专栏 最近我负责开发了一个跟Android相机有关的需求,新功能允许用户使用手机摄像头,快速拍摄...

腾讯云+社区
2018/09/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微信退款异步通知解密异常->填充无效,无法被移除

该问题是怎么引起的? AESDecrypt 加密处理发生异常 重现步骤 使用模拟工具 POSTMan 发送模拟通知 示例报文一: <return_code>SUCCESS</return_code><mch_id></mch_id><nonce_str></nonce_st......

夏至如沫
13分钟前
0
0
PC端网页使用微信扫码获取用户精确地理位置的一种解决方案[未测试]

移动互联网时代,获取用户地理位置来实现LBS当然不再话下。 在传统的PC浏览器应用领域,想获取用户的位置信息一般采用第三方的IP库,比如:淘宝IP地址库。但这种解决方案的缺陷是显而易见的:...

dragon_tech
15分钟前
0
0
【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像

前言 深度学习作为人工智能的重要手段,迎来了爆发,在NLP、CV、物联网、无人机等多个领域都发挥了非常重要的作用。最近几年,各种深度学习算法层出不穷, Generative Adverarial Network(GAN...

迷你芊宝宝
18分钟前
0
0
Dijkstra算法之 Java详解

迪杰斯特拉算法介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为...

孟飞阳
20分钟前
0
0
php7.2安装zookeeper扩展

简单记录下安装过程。 一、安装libzookeeper cd /usr/local/src/wget http://mirror.bit.edu.cn/apache//zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gztar -xf zookeeper-3.4.5.ta......

叫我哀木涕
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部