集成ZXing完美适配各种机型实现扫一扫~

来源:互联网 发布:显示器调色软件 编辑:程序博客网 时间:2024/06/11 17:49

首先国际惯例 直接加依赖

compile ‘cn.yipianfengye.android:zxing-library:1.8’

而后直接撸代码,我相信你能看懂,很简单的。

package XX.XX.XX;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;

public class MainActivity extends AppCompatActivity {
Button btn1;
Button btn2;

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    btn1 = (Button) findViewById(R.id.btn1);    btn2 = (Button) findViewById(R.id.btn2);    //直接扫描    btn1.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            Intent intent = new Intent(MainActivity.this, CaptureActivity.class);            startActivityForResult(intent, 1);        }    });    //从图库中扫描    btn2.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);            intent.addCategory(Intent.CATEGORY_OPENABLE);            intent.setType("image/*");            startActivityForResult(intent, 2);        }    });}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == 1) {        //处理扫描结果(在界面上显示)        if (null != data) {            Bundle bundle = data.getExtras();            if (bundle == null) {                return;            }            if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {                String result = bundle.getString(CodeUtils.RESULT_STRING);                Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();            } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {                Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();            }        }    } else if (requestCode == 2) {        if (data != null) {            Uri uri = data.getData();            ContentResolver cr = getContentResolver();            try {                Bitmap mBitmap = MediaStore.Images.Media.getBitmap(cr, uri);//显得到bitmap图片                String imagePath = getImageAbsolutePath(MainActivity.this, uri);                CodeUtils.analyzeBitmap(imagePath, new CodeUtils.AnalyzeCallback() {                    @Override                    public void onAnalyzeSuccess(Bitmap mBitmap, String result) {                        Toast.makeText(MainActivity.this, "解析结果:" + result, Toast.LENGTH_LONG).show();                    }                    @Override                    public void onAnalyzeFailed() {                        Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();                    }                });                if (mBitmap != null) {                    mBitmap.recycle();                }            } catch (Exception e) {                e.printStackTrace();            }        }    }}//根据打开相册返回的uri获取绝对路径 兼容不同版本public static String getImageAbsolutePath(Context context, Uri imageUri) {    if (context == null || imageUri == null)        return null;    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT            && DocumentsContract.isDocumentUri(context, imageUri)) {        if (isExternalStorageDocument(imageUri)) {            String docId = DocumentsContract.getDocumentId(imageUri);            String[] split = docId.split(":");            String type = split[0];            if ("primary".equalsIgnoreCase(type)) {                return Environment.getExternalStorageDirectory() + "/"                        + split[1];            }        } else if (isDownloadsDocument(imageUri)) {            String id = DocumentsContract.getDocumentId(imageUri);            Uri contentUri = ContentUris.withAppendedId(                    Uri.parse("content://downloads/public_downloads"),                    Long.valueOf(id));            return getDataColumn(context, contentUri, null, null);        } else if (isMediaDocument(imageUri)) {            String docId = DocumentsContract.getDocumentId(imageUri);            String[] split = docId.split(":");            String type = split[0];            Uri contentUri = null;            if ("image".equals(type)) {                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;            } else if ("video".equals(type)) {                contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;            } else if ("audio".equals(type)) {                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;            }            String selection = MediaStore.Images.Media._ID + "=?";            String[] selectionArgs = new String[]{split[1]};            return getDataColumn(context, contentUri, selection,                    selectionArgs);        }    } // MediaStore (and general)    else if ("content".equalsIgnoreCase(imageUri.getScheme())) {        // Return the remote address        if (isGooglePhotosUri(imageUri))            return imageUri.getLastPathSegment();        return getDataColumn(context, imageUri, null, null);    }    // File    else if ("file".equalsIgnoreCase(imageUri.getScheme())) {        return imageUri.getPath();    }    return null;}private static String getDataColumn(Context context, Uri uri,                                    String selection, String[] selectionArgs) {    Cursor cursor = null;    String column = MediaStore.Images.Media.DATA;    String[] projection = {column};    try {        cursor = context.getContentResolver().query(uri, projection,                selection, selectionArgs, null);        if (cursor != null && cursor.moveToFirst()) {            int index = cursor.getColumnIndexOrThrow(column);            return cursor.getString(index);        }    } finally {        if (cursor != null)            cursor.close();    }    return null;}/** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. */public static boolean isExternalStorageDocument(Uri uri) {    return "com.android.externalstorage.documents".equals(uri            .getAuthority());}/** * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvider. */public static boolean isDownloadsDocument(Uri uri) {    return "com.android.providers.downloads.documents".equals(uri            .getAuthority());}/** * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvider. */public static boolean isMediaDocument(Uri uri) {    return "com.android.providers.media.documents".equals(uri            .getAuthority());}/** * @param uri The Uri to check. * @return Whether the Uri authority is Google Photos. */public static boolean isGooglePhotosUri(Uri uri) {    return "com.google.android.apps.photos.content".equals(uri            .getAuthority());}

}

0 0
原创粉丝点击