Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f2ba1c5

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

7 files changed

Lines changed: 191 additions & 118 deletions

File tree

‎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)

AltStyle によって変換されたページ (->オリジナル) /