diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 3545368..435043e 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/README.md b/README.md index 674e6cc..c95ff23 100644 --- a/README.md +++ b/README.md @@ -36,17 +36,17 @@ ZXingLite for Android 是ZXing的精简版,优化扫码和生成二维码功 com.king.zxing zxing-lite - 1.0.1 + 1.0.2 pom ``` ### Gradle: ```gradle -implementation 'com.king.zxing:zxing-lite:1.0.1' +implementation 'com.king.zxing:zxing-lite:1.0.2' ``` ### Lvy: ```lvy - + ``` diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 724f40e..2d1f2cf 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 507eb1a..494edf2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,10 @@ + + + + cls; private String title; @@ -53,15 +66,48 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if(resultCode == RESULT_OK){ - if(data!=null){ - //识别结果 - String result = data.getStringExtra(Intents.Scan.RESULT); - Toast.makeText(this,result,Toast.LENGTH_SHORT).show(); + if(resultCode == RESULT_OK && data!=null){ + switch (requestCode){ + case REQUEST_CODE_SCAN: + String result = data.getStringExtra(Intents.Scan.RESULT); + Toast.makeText(this,result,Toast.LENGTH_SHORT).show(); + break; + case REQUEST_CODE_PHOTO: + parsePhoto(data); + break; } + } } + private void parsePhoto(Intent data){ + final String path = UriUtils.INSTANCE.getImagePath(this,data); + Log.d("Jenly","path:" + path); + if(TextUtils.isEmpty(path)){ + return; + } + //异步解析 + asyncThread(new Runnable() { + @Override + public void run() { + final String result = CodeUtils.parseCode(path); + runOnUiThread(new Runnable() { + @Override + public void run() { + Log.d("Jenly","result:" + result); + Toast.makeText(getContext(),result,Toast.LENGTH_SHORT).show(); + } + }); + + } + }); + + } + + private Context getContext(){ + return this; + } + @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); @@ -73,7 +119,12 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P @Override public void onPermissionsGranted(int requestCode, List list) { // Some permissions have been granted - startScan(cls,title); + switch (requestCode){ + case RC_CAMERA: + startScan(cls,title); + break; + } + } @Override @@ -101,6 +152,10 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P } } + private void asyncThread(Runnable runnable){ + new Thread(runnable).start(); + } + /** * 扫码 * @param cls @@ -110,7 +165,7 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeCustomAnimation(this,R.anim.in,R.anim.out); Intent intent = new Intent(this, cls); intent.putExtra(KEY_TITLE,title); - ActivityCompat.startActivityForResult(this,intent,REQUEST_CODE,optionsCompat.toBundle()); + ActivityCompat.startActivityForResult(this,intent,REQUEST_CODE_SCAN,optionsCompat.toBundle()); } /** @@ -124,6 +179,24 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P startActivity(intent); } + private void startPhotoCode(){ + Intent pickIntent = new Intent(Intent.ACTION_PICK, + MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + pickIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); + startActivityForResult(pickIntent, REQUEST_CODE_PHOTO); + } + + @AfterPermissionGranted(RC_READ_PHOTO) + private void checkExternalStoragePermissions(){ + String[] perms = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}; + if (EasyPermissions.hasPermissions(this, perms)) {//有权限 + startPhotoCode(); + }else{ + EasyPermissions.requestPermissions(this, getString(R.string.permission_external_storage), + RC_READ_PHOTO, perms); + } + } + public void OnClick(View v){ switch (v.getId()){ case R.id.btn1: @@ -141,6 +214,9 @@ public class MainActivity extends AppCompatActivity implements EasyPermissions.P case R.id.btn5: startCode(true); break; + case R.id.btn6: + checkExternalStoragePermissions(); + break; } } diff --git a/app/src/main/java/com/king/zxing/app/util/UriUtils.java b/app/src/main/java/com/king/zxing/app/util/UriUtils.java new file mode 100644 index 0000000..ea8e899 --- /dev/null +++ b/app/src/main/java/com/king/zxing/app/util/UriUtils.java @@ -0,0 +1,69 @@ +package com.king.zxing.app.util; + +import android.annotation.TargetApi; +import android.content.ContentUris; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import android.provider.DocumentsContract; +import android.provider.MediaStore; +import android.util.Log; + +/** + * @author Jenly Jenly + */ +public enum UriUtils { + INSTANCE; + + /** + * 获取图片 + */ + public String getImagePath(Context context,Intent data) { + String imagePath = null; + Uri uri = data.getData(); + //获取系統版本 + int currentapiVersion = Build.VERSION.SDK_INT; + if(currentapiVersion> Build.VERSION_CODES.KITKAT){ + Log.d("uri=intent.getData :", "" + uri); + if (DocumentsContract.isDocumentUri(context, uri)) { + String docId = DocumentsContract.getDocumentId(uri); + Log.d("getDocumentId(uri) :", "" + docId); + Log.d("uri.getAuthority() :", "" + uri.getAuthority()); + if ("com.android.providers.media.documents".equals(uri.getAuthority())) { + String id = docId.split(":")[1]; + String selection = MediaStore.Images.Media._ID + "=" + id; + imagePath = getImagePath(context,MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection); + } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) { + Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId)); + imagePath = getImagePath(context,contentUri, null); + } + + } else if ("content".equalsIgnoreCase(uri.getScheme())) { + imagePath = getImagePath(context,uri, null); + } + }else{ + imagePath = getImagePath(context,uri, null); + } + + return imagePath; + + } + + /** + * 通过uri和selection来获取真实的图片路径,从相册获取图片时要用 + */ + private String getImagePath(Context context,Uri uri, String selection) { + String path = null; + Cursor cursor = context.getContentResolver().query(uri, null, selection, null, null); + if (cursor != null) { + if (cursor.moveToFirst()) { + path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); + } + cursor.close(); + } + return path; + } + +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d5e0398..b2a2a47 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -98,4 +98,17 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/btn4" style="@style/OnClick"/> +