Skip to content

Commit 59e11f4

Browse files
committed
完成基本的拍照功能和文档添加
1 parent 028eaeb commit 59e11f4

12 files changed

Lines changed: 288 additions & 22 deletions

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@ android {
2222
dependencies {
2323
compile fileTree(dir: 'libs', include: ['*.jar'])
2424
testCompile 'junit:junit:4.12'
25+
compile project(':androidutils')
2526
compile 'com.android.support:appcompat-v7:23.2.1'
2627
}

notes/00_Android系统相机拍照的常见问题及解决方案.md

Whitespace-only changes.

src/main/AndroidManifest.xml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,33 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="com.clock.study">
44

5+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
6+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
7+
58
<application
9+
android:name=".StudyApplication"
610
android:allowBackup="true"
711
android:icon="@mipmap/ic_launcher"
812
android:label="@string/app_name"
913
android:supportsRtl="true"
1014
android:theme="@style/AppTheme">
11-
<activity android:name=".MainActivity">
15+
<activity
16+
android:name=".activity.MainActivity"
17+
android:screenOrientation="portrait">
1218
<intent-filter>
1319
<action android:name="android.intent.action.MAIN" />
1420

1521
<category android:name="android.intent.category.LAUNCHER" />
1622
</intent-filter>
1723
</activity>
24+
<activity
25+
android:name=".activity.CameraTakePhotoActivity"
26+
android:label="@string/take_photo"
27+
android:screenOrientation="portrait" />
28+
<activity
29+
android:name=".activity.PhotoPreviewActivity"
30+
android:label="@string/photo_preview"
31+
android:screenOrientation="portrait" />
1832
</application>
1933

2034
</manifest>

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

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.clock.study;
2+
3+
import android.app.Application;
4+
5+
import com.clock.utils.crash.CrashExceptionHandler;
6+
7+
/**
8+
* Created by Clock on 2016/5/13.
9+
*/
10+
public class StudyApplication extends Application {
11+
12+
/**
13+
* app在sd卡的主目录
14+
*/
15+
public final static String APP_MAIN_FOLDER_NAME = "AndroidStudy";
16+
/**
17+
* 本地存放闪退日志的目录
18+
*/
19+
public final static String CRASH_FOLDER_NAME = "crash";
20+
/**
21+
* app在sd卡存放图片的目录
22+
*/
23+
public final static String PHOTO_FOLDER_NAME = "photo";
24+
25+
@Override
26+
public void onCreate() {
27+
super.onCreate();
28+
29+
configCollectCrashInfo();
30+
}
31+
32+
/**
33+
* 配置奔溃信息的搜集
34+
*/
35+
private void configCollectCrashInfo() {
36+
CrashExceptionHandler crashExceptionHandler = new CrashExceptionHandler(this, APP_MAIN_FOLDER_NAME, CRASH_FOLDER_NAME);
37+
Thread.setDefaultUncaughtExceptionHandler(crashExceptionHandler);
38+
}
39+
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package com.clock.study.activity;
2+
3+
import android.content.Intent;
4+
import android.net.Uri;
5+
import android.os.Bundle;
6+
import android.os.Environment;
7+
import android.provider.MediaStore;
8+
import android.support.v7.app.AppCompatActivity;
9+
import android.util.Log;
10+
import android.view.View;
11+
import android.widget.Toast;
12+
13+
import com.clock.study.R;
14+
import com.clock.study.StudyApplication;
15+
import com.clock.utils.bitmap.BitmapUtils;
16+
import com.clock.utils.common.SystemUtils;
17+
18+
import java.io.File;
19+
import java.io.IOException;
20+
21+
/**
22+
* 调用系统相机进行拍照
23+
*
24+
* @author Clock
25+
* @since 2016-05-13
26+
*/
27+
public class CameraTakePhotoActivity extends AppCompatActivity implements View.OnClickListener {
28+
29+
private final static String TAG = CameraTakePhotoActivity.class.getSimpleName();
30+
private final static int TAKE_PHOTO_REQUEST_CODE = 1000;
31+
32+
private File mTempFile;
33+
34+
@Override
35+
protected void onCreate(Bundle savedInstanceState) {
36+
super.onCreate(savedInstanceState);
37+
setContentView(R.layout.activity_camera_take_photo);
38+
39+
findViewById(R.id.iv_take_photo).setOnClickListener(this);
40+
41+
}
42+
43+
@Override
44+
public void onClick(View v) {
45+
int viewId = v.getId();
46+
if (viewId == R.id.iv_take_photo) {
47+
createTempFile();
48+
if (mTempFile != null) {
49+
startCamera();
50+
} else {
51+
Toast.makeText(this, R.string.start_camera_error, Toast.LENGTH_SHORT).show();
52+
}
53+
54+
}
55+
}
56+
57+
/**
58+
* 调用系统相机
59+
*/
60+
private void startCamera() {
61+
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
62+
Uri fileUri = Uri.fromFile(mTempFile);
63+
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
64+
startActivityForResult(intent, TAKE_PHOTO_REQUEST_CODE);
65+
}
66+
67+
/**
68+
* 创建临时文件用于存储图片
69+
*/
70+
private void createTempFile() {
71+
if (SystemUtils.mountedSdCard()) {
72+
File appFolder = new File(Environment.getExternalStorageDirectory(), StudyApplication.APP_MAIN_FOLDER_NAME);
73+
if (!appFolder.exists()) {
74+
appFolder.mkdir();//创建app的主目录
75+
}
76+
77+
File photoFolder = new File(appFolder, StudyApplication.PHOTO_FOLDER_NAME);
78+
if (!photoFolder.exists()) {
79+
photoFolder.mkdir();//创建存放图片的目录
80+
}
81+
82+
if (mTempFile == null && photoFolder.exists()) {
83+
mTempFile = new File(photoFolder, BitmapUtils.TEMP_FILE_NAME + BitmapUtils.JPG_SUFFIX);
84+
}
85+
86+
if (mTempFile == null) {
87+
return;
88+
}
89+
90+
if (mTempFile.exists()) {
91+
mTempFile.delete();
92+
}
93+
try {
94+
mTempFile.createNewFile();
95+
} catch (IOException e) {
96+
e.printStackTrace();
97+
mTempFile = null;
98+
}
99+
}
100+
}
101+
102+
@Override
103+
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
104+
Log.i(TAG, "requestCode: " + requestCode + " resultCode: " + resultCode + " data: " + data);
105+
if (requestCode == TAKE_PHOTO_REQUEST_CODE && resultCode == RESULT_OK) {
106+
PhotoPreviewActivity.preview(this, mTempFile);
107+
finish();
108+
} else {
109+
super.onActivityResult(requestCode, resultCode, data);
110+
}
111+
}
112+
113+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.clock.study.activity;
2+
3+
import android.content.Intent;
4+
import android.os.Bundle;
5+
import android.support.v7.app.AppCompatActivity;
6+
import android.view.View;
7+
8+
import com.clock.study.R;
9+
10+
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
11+
12+
@Override
13+
protected void onCreate(Bundle savedInstanceState) {
14+
super.onCreate(savedInstanceState);
15+
setContentView(R.layout.activity_main);
16+
17+
findViewById(R.id.btn_camera_take_photo).setOnClickListener(this);
18+
}
19+
20+
@Override
21+
public void onClick(View v) {
22+
int viewId = v.getId();
23+
if (viewId == R.id.btn_camera_take_photo) {
24+
Intent takePhotoIntent = new Intent(this, CameraTakePhotoActivity.class);
25+
startActivity(takePhotoIntent);
26+
}
27+
}
28+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.clock.study.activity;
2+
3+
import android.app.Activity;
4+
import android.content.Intent;
5+
import android.graphics.Bitmap;
6+
import android.support.v7.app.AppCompatActivity;
7+
import android.os.Bundle;
8+
import android.widget.ImageView;
9+
10+
import com.clock.study.R;
11+
import com.clock.utils.bitmap.BitmapUtils;
12+
import com.clock.utils.common.RuleUtils;
13+
14+
import java.io.File;
15+
16+
/**
17+
* 预览图片界面
18+
*
19+
* @author Clock
20+
* @since 2016-05-13
21+
*/
22+
public class PhotoPreviewActivity extends AppCompatActivity {
23+
24+
private final static float RATIO = 0.75f;
25+
26+
private final static String EXTRA_IMAGE = "extra_image";
27+
28+
private ImageView mPhotoPreview;
29+
private File mImageFile;
30+
31+
@Override
32+
protected void onCreate(Bundle savedInstanceState) {
33+
super.onCreate(savedInstanceState);
34+
setContentView(R.layout.activity_photo_preview);
35+
36+
mPhotoPreview = (ImageView) findViewById(R.id.iv_photo_preview);
37+
38+
mImageFile = (File) getIntent().getSerializableExtra(EXTRA_IMAGE);
39+
int requestWidth = (int) (RuleUtils.getScreenWidth(this) * RATIO);
40+
int requestHeight = (int) (RuleUtils.getScreenHeight(this) * RATIO);
41+
Bitmap bitmap = BitmapUtils.decodeBitmapFromFile(mImageFile, requestWidth, requestHeight);//按照屏幕宽高的3/4比例进行缩放显示
42+
if (bitmap != null) {
43+
mPhotoPreview.setImageBitmap(bitmap);
44+
}
45+
}
46+
47+
public static void preview(Activity activity, File file) {
48+
Intent previewIntent = new Intent(activity, PhotoPreviewActivity.class);
49+
previewIntent.putExtra(EXTRA_IMAGE, file);
50+
activity.startActivity(previewIntent);
51+
}
52+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:layout_width="match_parent"
4+
android:layout_height="match_parent"
5+
android:orientation="vertical"
6+
android:paddingBottom="@dimen/activity_vertical_margin"
7+
android:paddingLeft="@dimen/activity_horizontal_margin"
8+
android:paddingRight="@dimen/activity_horizontal_margin"
9+
android:paddingTop="@dimen/activity_vertical_margin">
10+
11+
<Button
12+
android:id="@+id/iv_take_photo"
13+
android:layout_width="match_parent"
14+
android:layout_height="wrap_content"
15+
android:text="拍张照片吧" />
16+
</LinearLayout>
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:tools="http://schemas.android.com/tools"
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
43
android:layout_width="match_parent"
54
android:layout_height="match_parent"
65
android:paddingBottom="@dimen/activity_vertical_margin"
76
android:paddingLeft="@dimen/activity_horizontal_margin"
87
android:paddingRight="@dimen/activity_horizontal_margin"
9-
android:paddingTop="@dimen/activity_vertical_margin"
10-
tools:context="com.clock.study.MainActivity">
8+
android:paddingTop="@dimen/activity_vertical_margin">
119

12-
<TextView
13-
android:layout_width="wrap_content"
10+
<Button
11+
android:id="@+id/btn_camera_take_photo"
12+
android:layout_width="match_parent"
1413
android:layout_height="wrap_content"
15-
android:text="Hello World!" />
16-
</RelativeLayout>
14+
android:text="拍照保存实现代码" />
15+
</LinearLayout>

0 commit comments

Comments
 (0)