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