学习完Intent和IntentFilter之后,实践的学习一下如何通过Intent来调用系统相机进行拍照,这种方法是Android相机拍照的方式之一:

  • 马上学Android 025 - 调用Android相机进行拍照

调用系统进行拍照方法是最简单的相机应用,只需要一个启动方式和一个能显示相机返回的图片信息的控件,比如ImageView控件,看一下布局文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.chen.activity.CaptureActivity"
android:background="#BBFFFF"
android:orientation="vertical">


<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:id="@+id/ivCaptureImg"
android:layout_gravity="center"
android:background="#FFCC00"
/>

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnCapture"
android:text="@string/caputre_button"
/>


</LinearLayout>

没有多余其他复杂的控件就能达到需求(有时候事情不要往复杂的地方走),有了布局文件和启动按钮之后就要看一下按钮的响应函数和相机返回响应函数的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

public class CaptureActivity extends Activity {

private Button btn;
private ImageView ivCaptureImg;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_capture);

btn = (Button)findViewById(R.id.btnCapture);
ivCaptureImg = (ImageView)findViewById(R.id.ivCaptureImg);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//通过构造函数设置Intent的action值
Intent capIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//带有返回值的启动方式
startActivityForResult(capIntent,100);
}
});
}

/**
* 相机拍照结束处理逻辑
*/

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 100){
if(resultCode == RESULT_OK){
//显示图片到ImageView上
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
ivCaptureImg.setImageBitmap(bitmap);

} else if(resultCode == RESULT_CANCELED){
//提示用户未拍照成功
Toast.makeText(CaptureActivity.this,"拍照未成功",Toast.LENGTH_SHORT).show();
}
}
}
}

这样通过很少的代码就简单的完成了一个调用系统相机的应用。