频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
android 从相机或者相册获取照片!
2012-01-09 10:15:58           
收藏   我要投稿

最近项目用到调用相机,给出代码,只是调用的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. } 

 摘自 chenghai2011的专栏

点击复制链接 与好友分享!回本站首页
相关TAG标签 相机 照片 相册
上一篇:android 代码 操作 gps 开关
下一篇:LinearLayout、RelativeLayout、FrameLayout居中显示
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站