Skip to content

Commit f2ba1c5

Browse files
committed
添加CapturePhotoHelper进行封装
1 parent 508e78c commit f2ba1c5

File tree

7 files changed

+191
-118
lines changed

7 files changed

+191
-118
lines changed

src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
</intent-filter>
2323
</activity>
2424
<activity
25-
android:name=".activity.CameraTakePhotoActivity"
25+
android:name=".activity.CapturePhotoActivity"
2626
android:label="@string/take_photo"
2727
android:screenOrientation="portrait" />
2828
<activity

src/main/java/com/clock/study/activity/CameraTakePhotoActivity.java

Lines changed: 0 additions & 113 deletions
This file was deleted.
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.clock.study.activity;
2+
3+
import android.content.Intent;
4+
import android.os.Bundle;
5+
import android.os.Environment;
6+
import android.support.v7.app.AppCompatActivity;
7+
import android.util.Log;
8+
import android.view.View;
9+
10+
import com.clock.study.R;
11+
import com.clock.study.StudyApplication;
12+
import com.clock.study.helper.CapturePhotoHelper;
13+
import com.clock.utils.common.SystemUtils;
14+
15+
import java.io.File;
16+
17+
/**
18+
* 调用系统相机进行拍照
19+
*
20+
* @author Clock
21+
* @since 2016-05-13
22+
*/
23+
public class CapturePhotoActivity extends AppCompatActivity implements View.OnClickListener {
24+
25+
private final static String TAG = CapturePhotoActivity.class.getSimpleName();
26+
27+
private CapturePhotoHelper mCapturePhotoHelper;
28+
29+
@Override
30+
protected void onCreate(Bundle savedInstanceState) {
31+
super.onCreate(savedInstanceState);
32+
setContentView(R.layout.activity_camera_take_photo);
33+
34+
File photoFolder = null;
35+
if (SystemUtils.mountedSdCard()) {
36+
File appFolder = new File(Environment.getExternalStorageDirectory(), StudyApplication.APP_MAIN_FOLDER_NAME);
37+
photoFolder = new File(appFolder, StudyApplication.PHOTO_FOLDER_NAME);
38+
}
39+
mCapturePhotoHelper = new CapturePhotoHelper(this, photoFolder);
40+
41+
findViewById(R.id.iv_take_photo).setOnClickListener(this);
42+
43+
}
44+
45+
@Override
46+
public void onClick(View v) {
47+
int viewId = v.getId();
48+
if (viewId == R.id.iv_take_photo) {
49+
mCapturePhotoHelper.capture();
50+
}
51+
}
52+
53+
@Override
54+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
55+
Log.i(TAG, "requestCode: " + requestCode + " resultCode: " + resultCode + " data: " + data);
56+
if (requestCode == CapturePhotoHelper.CAPTURE_PHOTO_REQUEST_CODE && resultCode == RESULT_OK) {
57+
File photoFile = mCapturePhotoHelper.getPhoto();
58+
if (photoFile != null) {
59+
PhotoPreviewActivity.preview(this, photoFile);
60+
}
61+
finish();
62+
} else {
63+
super.onActivityResult(requestCode, resultCode, data);
64+
}
65+
}
66+
67+
}

src/main/java/com/clock/study/activity/MainActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected void onCreate(Bundle savedInstanceState) {
2121
public void onClick(View v) {
2222
int viewId = v.getId();
2323
if (viewId == R.id.btn_camera_take_photo) {
24-
Intent takePhotoIntent = new Intent(this, CameraTakePhotoActivity.class);
24+
Intent takePhotoIntent = new Intent(this, CapturePhotoActivity.class);
2525
startActivity(takePhotoIntent);
2626
}
2727
}

src/main/java/com/clock/study/activity/PhotoPreviewActivity.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
import android.app.Activity;
44
import android.content.Intent;
55
import android.graphics.Bitmap;
6-
import android.support.v7.app.AppCompatActivity;
76
import android.os.Bundle;
8-
import android.util.Log;
7+
import android.support.v7.app.AppCompatActivity;
98
import android.widget.ImageView;
109

1110
import com.clock.study.R;
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package com.clock.study.helper;
2+
3+
import android.app.Activity;
4+
import android.content.Intent;
5+
import android.content.pm.PackageManager;
6+
import android.content.pm.ResolveInfo;
7+
import android.net.Uri;
8+
import android.provider.MediaStore;
9+
import android.widget.Toast;
10+
11+
import com.clock.study.R;
12+
import com.clock.utils.bitmap.BitmapUtils;
13+
14+
import java.io.File;
15+
import java.io.IOException;
16+
import java.text.SimpleDateFormat;
17+
import java.util.Date;
18+
import java.util.List;
19+
20+
/**
21+
* 拍照辅助类
22+
* <p/>
23+
* Created by Clock on 2016/5/21.
24+
*/
25+
public class CapturePhotoHelper {
26+
27+
private final static String TIMESTAMP_FORMAT = "yyyy_MM_dd_HH_mm_ss";
28+
29+
public final static int CAPTURE_PHOTO_REQUEST_CODE = 0x1111;
30+
31+
private Activity mActivity;
32+
/**
33+
* 存放图片的目录
34+
*/
35+
private File mPhotoFolder;
36+
/**
37+
* 拍照生成的图片文件
38+
*/
39+
private File mPhotoFile;
40+
41+
/**
42+
* @param activity
43+
* @param photoFolder 存放生成照片的目录,目录不存在时候会自动创建,但不允许为null;
44+
*/
45+
public CapturePhotoHelper(Activity activity, File photoFolder) {
46+
this.mActivity = activity;
47+
this.mPhotoFolder = photoFolder;
48+
}
49+
50+
/**
51+
* 拍照
52+
*/
53+
public void capture() {
54+
if (hasCamera()) {
55+
createPhotoFile();
56+
57+
if (mPhotoFile == null) {
58+
Toast.makeText(mActivity, R.string.camera_open_error, Toast.LENGTH_SHORT).show();
59+
return;
60+
}
61+
62+
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
63+
Uri fileUri = Uri.fromFile(mPhotoFile);
64+
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
65+
mActivity.startActivityForResult(captureIntent, CAPTURE_PHOTO_REQUEST_CODE);
66+
67+
} else {
68+
Toast.makeText(mActivity, R.string.camera_open_error, Toast.LENGTH_SHORT).show();
69+
}
70+
}
71+
72+
/**
73+
* 创建照片文件
74+
*/
75+
private void createPhotoFile() {
76+
if (mPhotoFolder != null) {
77+
if (!mPhotoFolder.exists()) {//检查保存图片的目录存不存在
78+
mPhotoFolder.mkdirs();
79+
}
80+
81+
String fileName = new SimpleDateFormat(TIMESTAMP_FORMAT).format(new Date());
82+
mPhotoFile = new File(mPhotoFolder, fileName + BitmapUtils.JPG_SUFFIX);
83+
if (mPhotoFile.exists()) {
84+
mPhotoFile.delete();
85+
}
86+
try {
87+
mPhotoFile.createNewFile();
88+
} catch (IOException e) {
89+
e.printStackTrace();
90+
mPhotoFile = null;
91+
}
92+
} else {
93+
mPhotoFile = null;
94+
Toast.makeText(mActivity, R.string.not_specify_a_directory, Toast.LENGTH_SHORT).show();
95+
}
96+
}
97+
98+
99+
/**
100+
* 判断系统中是否存在可以启动的相机应用
101+
*
102+
* @return 存在返回true,不存在返回false
103+
*/
104+
public boolean hasCamera() {
105+
PackageManager packageManager = mActivity.getPackageManager();
106+
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
107+
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
108+
return list.size() > 0;
109+
}
110+
111+
/**
112+
* 获取当前拍到的图片文件
113+
*
114+
* @return
115+
*/
116+
public File getPhoto() {
117+
return mPhotoFile;
118+
}
119+
}

src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<resources>
22
<string name="app_name">AndroidStudyCode</string>
3-
<string name="start_camera_error">启动相机失败</string>
3+
<string name="camera_open_error">启动相机失败</string>
44
<string name="photo_preview">PhotoPreview</string>
55
<string name="take_photo">TakePhoto</string>
66
<string name="save_photo">保存图片</string>
7+
<string name="not_specify_a_directory">未指定存储目录</string>
78
</resources>

0 commit comments

Comments
 (0)