diff --git a/README.md b/README.md index 0d4812b..0361c5a 100644 --- a/README.md +++ b/README.md @@ -19,11 +19,12 @@ Image selector for Android device. Support single choice and multi-choice. Add module `multi-image-selector` as your dependence. in your `build.gradle` : ```java repositories { - maven { url "https://jitpack.io" } + jcenter() } dependencies { - compile 'com.github.lovetuzitong:MultiImageSelector:1.2' + //compile 'com.github.lovetuzitong:MultiImageSelector:1.2' + compile 'com.hx.multi-image-selector:multi-image-selector:1.2.2' } ``` @@ -189,4 +190,4 @@ copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: >The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. \ No newline at end of file +copies or substantial portions of the Software. diff --git a/README_zh.md b/README_zh.md index bfb8bc5..6049a5a 100644 --- a/README_zh.md +++ b/README_zh.md @@ -19,11 +19,12 @@ 把模块 `multi-image-selector` 作为你的项目依赖添加到工程中. 在项目`build.gradle` 中: ```java repositories { - maven { url "https://jitpack.io" } + jcenter() } dependencies { - compile 'com.github.lovetuzitong:MultiImageSelector:1.2' + //compile 'com.github.lovetuzitong:MultiImageSelector:1.2' + compile 'com.hx.multi-image-selector:multi-image-selector:1.2.2' } ``` diff --git a/app/build.gradle b/app/build.gradle index 6536c30..9252e01 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 25 + buildToolsVersion '25.0.1' defaultConfig { applicationId "me.nereo.multiimageselector" minSdkVersion 12 - targetSdkVersion 23 + targetSdkVersion 25 versionCode 1 versionName "1.0" } @@ -21,6 +21,6 @@ android { dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:23.4.0' compile project(':multi-image-selector') + compile 'com.android.support:appcompat-v7:25.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 38546eb..9667b17 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > + diff --git a/bintray-release.gradle b/bintray-release.gradle new file mode 100644 index 0000000..f9ecc4c --- /dev/null +++ b/bintray-release.gradle @@ -0,0 +1,42 @@ +apply plugin: 'com.novoda.bintray-release' + +// This generates sources.jar +task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' +} + +task javadoc(type: Javadoc) { + source = android.sourceSets.main.java.srcDirs + classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + failOnError false +} + +// This generates javadoc.jar +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + +artifacts { + archives javadocJar + archives sourcesJar +} + +// javadoc configuration +javadoc { + options { + encoding "UTF-8" + charSet 'UTF-8' + author true + } +} + +afterEvaluate { + Task bintrayUploadTask = tasks.findByName('bintrayUpload') + Task uploadArchivesTask = tasks.findByName('uploadArchives') + if (bintrayUploadTask != null && uploadArchivesTask != null) { + bintrayUploadTask.dependsOn uploadArchivesTask + } +} + diff --git a/build.gradle b/build.gradle index f6e9073..33e7a5d 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' - + classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.novoda:bintray-release:0.4.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7af1915..f445ef4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed May 18 11:49:16 CST 2016 +#Fri Jan 20 11:08:16 CST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/multi-image-selector/build.gradle b/multi-image-selector/build.gradle index dba9a97..6360788 100644 --- a/multi-image-selector/build.gradle +++ b/multi-image-selector/build.gradle @@ -1,14 +1,14 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 25 + buildToolsVersion '25.0.1' defaultConfig { minSdkVersion 12 - targetSdkVersion 23 + targetSdkVersion 25 versionCode 1 - versionName "1.1" + versionName "1.2.2" } buildTypes { release { @@ -16,12 +16,57 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - + lintOptions { + abortOnError false + } resourcePrefix "mis_" } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:23.4.0' - compile 'com.squareup.picasso:picasso:2.4.0' + compile fileTree(include: ['*.jar'], dir: 'libs') + compile 'com.squareup.picasso:picasso:2.5.2' + compile 'com.android.support:appcompat-v7:25.1.0' +} + +tasks.withType(Javadoc) { + options.addStringOption('Xdoclint:none', '-quiet') + options.addStringOption('encoding', 'UTF-8') } + +apply from: rootProject.projectDir.absolutePath + "/bintray-release.gradle" + +// load properties +Properties properties = new Properties() +File localPropertiesFile = project.file("$rootProject.projectDir.absolutePath /local.properties"); +if (localPropertiesFile.exists()) { + properties.load(localPropertiesFile.newDataInputStream()) +} +File projectPropertiesFile = project.file("project.properties"); +if (projectPropertiesFile.exists()) { + properties.load(projectPropertiesFile.newDataInputStream()) +} + +// read properties +def projectName = properties.getProperty("project.name") +def projectGroupId = properties.getProperty("project.groupId") +def projectArtifactId = properties.getProperty("project.artifactId") +def projectVersionName = android.defaultConfig.versionName +def projectSiteUrl = properties.getProperty("project.siteUrl") +def projectGitUrl = properties.getProperty("project.gitUrl") + +def bintray_Org = properties.getProperty("bintray.org") +def bintray_User = properties.getProperty("bintray.user") +def bintrayApikey = properties.getProperty("bintray.apikey") + +publish { + userOrg = bintray_Org + groupId = projectGroupId + artifactId = projectArtifactId + uploadName = projectName + website = projectSiteUrl + repository = projectGitUrl + publishVersion = projectVersionName + bintrayUser = bintray_User + bintrayKey = bintrayApikey + dryRun = true +} \ No newline at end of file diff --git a/multi-image-selector/project.properties b/multi-image-selector/project.properties new file mode 100644 index 0000000..b4747db --- /dev/null +++ b/multi-image-selector/project.properties @@ -0,0 +1,6 @@ +#project +project.name=Multi-Image-Selector +project.groupId=com.hx.multi-image-selector +project.artifactId=multi-image-selector +project.siteUrl=https://github.com/qq549631030/MultiImageSelector +project.gitUrl=https://github.com/qq549631030/MultiImageSelector.git \ No newline at end of file diff --git a/multi-image-selector/src/main/AndroidManifest.xml b/multi-image-selector/src/main/AndroidManifest.xml index 7fd4a3a..b0de6ce 100644 --- a/multi-image-selector/src/main/AndroidManifest.xml +++ b/multi-image-selector/src/main/AndroidManifest.xml @@ -3,9 +3,18 @@ + - - + + + + diff --git a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorFragment.java b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorFragment.java index 4c068c6..a695ade 100644 --- a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorFragment.java +++ b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/MultiImageSelectorFragment.java @@ -12,6 +12,7 @@ import android.graphics.Point; import android.graphics.drawable.ColorDrawable; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; @@ -21,6 +22,7 @@ import android.support.v4.app.LoaderManager; import android.support.v4.content.ContextCompat; import android.support.v4.content.CursorLoader; +import android.support.v4.content.FileProvider; import android.support.v4.content.Loader; import android.support.v7.app.AlertDialog; import android.support.v7.widget.ListPopupWindow; @@ -57,7 +59,7 @@ public class MultiImageSelectorFragment extends Fragment { public static final String TAG = "MultiImageSelectorFragment"; - private static final int REQUEST_STORAGE_WRITE_ACCESS_PERMISSION = 110; + private static final int REQUEST_CAMERA_PERMISSION = 110; private static final int REQUEST_CAMERA = 100; private static final String KEY_TEMP_FILE = "key_temp_file"; @@ -303,11 +305,12 @@ public void onConfigurationChanged(Configuration newConfig) { * Open camera */ private void showCameraAction() { - if(ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN // Permission was added in API Level 16 + &&ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){ - requestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, - getString(R.string.mis_permission_rationale_write_storage), - REQUEST_STORAGE_WRITE_ACCESS_PERMISSION); + requestPermission(Manifest.permission.CAMERA, + getString(R.string.mis_permission_rationale_camera), + REQUEST_CAMERA_PERMISSION); }else { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (intent.resolveActivity(getActivity().getPackageManager()) != null) { @@ -317,7 +320,13 @@ private void showCameraAction() { e.printStackTrace(); } if (mTmpFile != null && mTmpFile.exists()) { - intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTmpFile)); + Uri imageUri = null; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + imageUri = FileProvider.getUriForFile(getContext(), getContext().getPackageName() + ".mis.fileprovider", mTmpFile);//通过FileProvider创建一个content类型的Uri + } else { + imageUri = Uri.fromFile(mTmpFile); + } + intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, REQUEST_CAMERA); } else { Toast.makeText(getActivity(), R.string.mis_error_image_not_exist, Toast.LENGTH_SHORT).show(); @@ -348,7 +357,7 @@ public void onClick(DialogInterface dialog, int which) { @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - if(requestCode == REQUEST_STORAGE_WRITE_ACCESS_PERMISSION){ + if(requestCode == REQUEST_CAMERA_PERMISSION){ if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ showCameraAction(); } diff --git a/multi-image-selector/src/main/java/me/nereo/multi_image_selector/utils/MISFileProvider.java b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/utils/MISFileProvider.java new file mode 100644 index 0000000..4c7a857 --- /dev/null +++ b/multi-image-selector/src/main/java/me/nereo/multi_image_selector/utils/MISFileProvider.java @@ -0,0 +1,11 @@ +package me.nereo.multi_image_selector.utils; + +import android.support.v4.content.FileProvider; + +/** + * @author huangx + * @date 2017/12/15 + */ + +public class MISFileProvider extends FileProvider { +} diff --git a/multi-image-selector/src/main/res/values-zh/strings.xml b/multi-image-selector/src/main/res/values-zh/strings.xml index 1885919..bff3662 100644 --- a/multi-image-selector/src/main/res/values-zh/strings.xml +++ b/multi-image-selector/src/main/res/values-zh/strings.xml @@ -12,5 +12,6 @@ 拒绝 浏览图片需要您提供浏览存储的权限 + 拍摄照片需要您提交摄像头权限 保存拍照图片需要您提供写存储权限 diff --git a/multi-image-selector/src/main/res/values/strings.xml b/multi-image-selector/src/main/res/values/strings.xml index 75de533..9662246 100644 --- a/multi-image-selector/src/main/res/values/strings.xml +++ b/multi-image-selector/src/main/res/values/strings.xml @@ -13,5 +13,6 @@ OK CANCEL Storage read permission is needed to pick files. + Camera permission is needed to take photo. Storage write permission is needed to save the image. diff --git a/multi-image-selector/src/main/res/xml/mis_file_paths.xml b/multi-image-selector/src/main/res/xml/mis_file_paths.xml new file mode 100644 index 0000000..9b2a5e8 --- /dev/null +++ b/multi-image-selector/src/main/res/xml/mis_file_paths.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file