diff --git a/build.gradle b/build.gradle
index a1c0fb1..1ef8a00 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.0-beta1'
+ classpath 'com.android.tools.build:gradle:2.3.0-beta2'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.4.0'
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.5.0'
@@ -27,8 +27,8 @@ task clean(type: Delete) {
}
ext {
- supportLibraryVersion = '25.0.1'
+ supportLibraryVersion = '25.1.0'
rx_binding_version = '0.4.0'
- sdk_version = 24
- buildToolsVersion = "25.0.0"
+ sdk_version = 25
+ buildToolsVersion = "25.0.1"
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 4e5da3d..495b072 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Dec 28 10:00:20 PST 2015
+#Mon Jan 16 09:22:57 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.2.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
diff --git a/lib/src/main/AndroidManifest.xml b/lib/src/main/AndroidManifest.xml
index dfe2214..bf6eb4d 100644
--- a/lib/src/main/AndroidManifest.xml
+++ b/lib/src/main/AndroidManifest.xml
@@ -1,8 +1,11 @@
-
+
+
+
+
+
+
+
diff --git a/lib/src/main/java/moe/xing/getimage/GetImageActivity.java b/lib/src/main/java/moe/xing/getimage/GetImageActivity.java
index 7583d1f..c7187f8 100644
--- a/lib/src/main/java/moe/xing/getimage/GetImageActivity.java
+++ b/lib/src/main/java/moe/xing/getimage/GetImageActivity.java
@@ -6,6 +6,9 @@
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.provider.MediaStore;
+import android.support.annotation.Nullable;
+import android.support.v4.content.FileProvider;
import android.widget.Toast;
import com.soundcloud.android.crop.Crop;
@@ -13,6 +16,8 @@
import java.io.File;
import java.io.IOException;
import java.net.URI;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.Locale;
import moe.xing.baseutils.Init;
@@ -40,6 +45,8 @@ public class GetImageActivity extends Activity {
private static final String SELECT_MODE = "select_mode";
private static final String MAX_SIZE = "max_size";
private Uri corpedImage;
+ @Nullable
+ private File takenFile = null;
/**
* 获取启动 intent
@@ -60,18 +67,27 @@ public static Intent getStartIntent(Context context, int subscriberID, @RxGetIma
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
- doSelect();
+ doGet();
}
}
@Override
protected void onNewIntent(Intent intent) {
- doSelect();
+ doGet();
}
/**
* 选择图片
*/
+ private void doGet() {
+ int mode = getIntent().getIntExtra(SELECT_MODE, RxGetImage.MODE_SINGLE);
+ if (mode == RxGetImage.MODE_TAKE_PHOTO || mode == RxGetImage.MODE_TAKE_PHOTO_AND_CORP) {
+ doTake();
+ } else {
+ doSelect();
+ }
+ }
+
private void doSelect() {
Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
photoPickerIntent.setType("image/*");
@@ -81,6 +97,25 @@ private void doSelect() {
IntentUtils.startIntentForResult(photoPickerIntent, this, SELECT_PHOTO);
}
+ private void doTake() {
+ Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ try {
+ takenPhotoFile();
+ } catch (IOException ioe) {
+ RxGetImage.getInstance().onError(new Throwable("无法创建相片,可能空间已满"), getSubscriberID());
+ finish();
+ return;
+ }
+ if (takenFile != null) {
+ Uri photoURI = FileProvider.getUriForFile(this,
+ "com.example.android.fileprovider",
+ takenFile);
+ takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
+ IntentUtils.startIntentForResult(takeIntent, this, TAKE_PHOTO);
+ }
+
+ }
+
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
@@ -103,6 +138,18 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
finish();
}
break;
+ case TAKE_PHOTO:
+ if (takenFile != null && takenFile.exists() && takenFile.length() > 0) {
+ if (RxGetImage.MODE_TAKE_PHOTO_AND_CORP == getSelectMode()) {
+ toCorp(takenFile);
+ } else {
+ RxGetImage.getInstance().onAns(takenFile, getSubscriberID());
+ RxGetImage.getInstance().onComplete(getSubscriberID());
+ }
+ } else {
+ RxGetImage.getInstance().onError(new Throwable("空文件"), getSubscriberID());
+ finish();
+ }
default:
super.onActivityResult(requestCode, resultCode, data);
finish();
@@ -223,7 +270,6 @@ public void onNext(File s) {
});
}
-
private int getSubscriberID() {
return getIntent().getIntExtra(SUBSCRIBER_ID, 0);
}
@@ -250,4 +296,14 @@ private void toCorp(File image) {
}
corpedImage = null;
}
+
+ private File takenPhotoFile() throws IOException {
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
+ String imageFileName = "JPEG_" + timeStamp + "_";
+
+ File image = FileUtils.getCacheFile(timeStamp);
+ takenFile = image;
+
+ return image;
+ }
}
diff --git a/lib/src/main/java/moe/xing/getimage/RxGetImage.java b/lib/src/main/java/moe/xing/getimage/RxGetImage.java
index f4ecbe5..1d99dde 100644
--- a/lib/src/main/java/moe/xing/getimage/RxGetImage.java
+++ b/lib/src/main/java/moe/xing/getimage/RxGetImage.java
@@ -24,6 +24,8 @@ public class RxGetImage {
public static final int MODE_SINGLE = 1;
public static final int MODE_SINGLE_AND_CORP = 2;
public static final int MODE_MULTIPLE = 3;
+ public static final int MODE_TAKE_PHOTO = 4;
+ public static final int MODE_TAKE_PHOTO_AND_CORP = 5;
private static RxGetImage sSingleton;
private SparseArray> mSubscribers = new SparseArray<>();
@@ -51,7 +53,7 @@ public static RxGetImage getInstance() {
* @return Observable
*/
@NonNull
- public Observable getImage(@SelectMode final int selectMode) {
+ public Observable getImage(final boolean needCorp) {
return Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber super File> subscriber) {
@@ -61,7 +63,8 @@ public void call(Subscriber super File> subscriber) {
i++;
}
- Intent intent = GetImageActivity.getStartIntent(Init.getApplication(), i, selectMode, 1);
+ Intent intent = GetImageActivity.getStartIntent(Init.getApplication(), i,
+ needCorp ? MODE_SINGLE_AND_CORP : MODE_SINGLE, 1);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Init.getApplication().startActivity(intent);
mSubscribers.append(i, subscriber);
@@ -95,6 +98,31 @@ public void call(Subscriber super File> subscriber) {
});
}
+ /**
+ * 拍摄图片
+ *
+ * @return Observable
+ */
+ @NonNull
+ public Observable takeImage(final boolean needCorp) {
+ return Observable.create(new Observable.OnSubscribe() {
+ @Override
+ public void call(Subscriber super File> subscriber) {
+ synchronized (RxGetImage.class) {
+ int i = 1;
+ while (mSubscribers.get(i) != null) {
+ i++;
+ }
+ Intent intent = GetImageActivity.getStartIntent(Init.getApplication(), i,
+ needCorp ? MODE_TAKE_PHOTO_AND_CORP : MODE_TAKE_PHOTO, 1);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ Init.getApplication().startActivity(intent);
+ mSubscribers.append(i, subscriber);
+ }
+ }
+ });
+ }
+
/**
* 设置返回的图片
*
@@ -114,15 +142,19 @@ void onAns(@Nullable File file, int subscriberID) {
*/
void onError(Throwable message, int subscriberID) {
Subscriber super File> subscriber = mSubscribers.get(subscriberID);
- subscriber.onError(message);
+ if (subscriber != null) {
+ subscriber.onError(message);
+ }
}
void onComplete(int subscriberID) {
Subscriber super File> subscriber = mSubscribers.get(subscriberID);
- subscriber.onCompleted();
+ if (subscriber != null) {
+ subscriber.onCompleted();
+ }
}
- @IntDef({MODE_SINGLE, MODE_MULTIPLE, MODE_SINGLE_AND_CORP})
+ @IntDef({MODE_SINGLE, MODE_MULTIPLE, MODE_SINGLE_AND_CORP, MODE_TAKE_PHOTO, MODE_TAKE_PHOTO_AND_CORP})
public @interface SelectMode {
}
}
diff --git a/lib/src/main/res/xml/get_image_provider.xml b/lib/src/main/res/xml/get_image_provider.xml
new file mode 100644
index 0000000..a144f09
--- /dev/null
+++ b/lib/src/main/res/xml/get_image_provider.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
\ No newline at end of file