package com.zijunlin.Zxing.Demo;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Vector;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.ChecksumException;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.FormatException;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.QRCodeReader;
import com.zijunlin.Zxing.Demo.camera.CameraManager;
import com.zijunlin.Zxing.Demo.camera.PlanarYUVLuminanceSource;
import com.zijunlin.Zxing.Demo.decoding.CaptureActivityHandler;
import com.zijunlin.Zxing.Demo.decoding.DecodeFormatManager;
import com.zijunlin.Zxing.Demo.decoding.DecodeHandler;
import com.zijunlin.Zxing.Demo.decoding.InactivityTimer;
import com.zijunlin.Zxing.Demo.view.ViewfinderResultPointCallback;
import com.zijunlin.Zxing.Demo.view.ViewfinderView;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.provider.MediaStore;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.Display;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class CaptureActivity extends Activity implements Callback ,OnClickListener{
private CaptureActivityHandler handler;
private ViewfinderView viewfinderView;
private boolean hasSurface;
private Vector<BarcodeFormat> decodeFormats;
private String characterSet;
private TextView txtResult;
private InactivityTimer inactivityTimer;
private MediaPlayer mediaPlayer;
private boolean playBeep;
private static final float BEEP_VOLUME = 0.10f;
private boolean vibrate;
private Handler mHandler;
private TextView mLightText;
private ImageButton mSwitchLight;
private ImageButton m2DCode;
private Button mAlbum;
private Button mSaveImage;
private Button mCancel;
private Bitmap myBitmap;//生成我的二维码
private LinearLayout mShow2dCodeImage;
private ImageView mImage2dCode;
public boolean isFlashLight = false;
/**
* 打开相册的请求码
*/
private static final int REQUEST_CODE_OPEN_ALBUM = 0x100;
/**
* 相册图片解码成功
*/
private static final int DECODE_SUCCESS = 200;
/**
* 闪光灯已经打开
*/
private static final int LIGHT_ON = 100;
/**
* 闪光灯已经关闭
*/
private static final int LIGHT_OFF = 99;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_zxing);
//屏幕一直亮
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//初始化 CameraManager
CameraManager.init(getApplication());
mImage2dCode = (ImageView) findViewById(R.id.iv_zxing_my2dCode);
mShow2dCodeImage = (LinearLayout) findViewById(R.id.ll_show_my2dCode);
m2DCode = (ImageButton) findViewById(R.id.ib_zxing_my2dcode);
mSaveImage = (Button) findViewById(R.id.but_zxing_myimage_save);
mCancel = (Button) findViewById(R.id.but_zxing_myimage_cancel);
mLightText = (TextView) findViewById(R.id.tv_zxing_switch_light);
mSwitchLight = (ImageButton) findViewById(R.id.ib_zxing_switch_light);
mAlbum = (Button) findViewById(R.id.but_album);
viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);
txtResult = (TextView) findViewById(R.id.txtResult);
hasSurface = false;
inactivityTimer = new InactivityTimer(this);
//相册按钮( 点击字体颜色改变)
mAlbum.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.but_album) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Log.i("TAG", "action_down....");
mAlbum.setTextColor(Color.parseColor("#000000"));
}
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.i("TAG", "action_up....");
mAlbum.setTextColor(Color.parseColor("#FFFFFF"));
//打开系统相册,选择图片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.putExtra("return-data", true);
CaptureActivity.this.startActivityForResult(intent, REQUEST_CODE_OPEN_ALBUM);
}
}
return false;
}
});
//底部按钮设置监听
mSwitchLight.setOnClickListener(this);
m2DCode.setOnClickListener(this);
mSaveImage.setOnClickListener(this);
mCancel.setOnClickListener(this);
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
if(what == DECODE_SUCCESS){
Log.d("TAG", "decode_result---->"+msg.obj);
goPageURL((String) msg.obj);
}else if(what == LIGHT_ON){
mLightText.setText("关灯");
}else if(what == LIGHT_OFF){
mLightText.setText("开灯");
}
}
};
}
/**
* 获取相册选择的图片
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("TAG", "bitmap------->"+data);
if(requestCode == REQUEST_CODE_OPEN_ALBUM){
if(data !=null){
Log.i("TAG", "uri------->"+data.getData().toString());
// Bitmap bitmap = (Bitmap) data.getExtras().get("data");
//1 获取图片本地地址
try {
// 外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口
ContentResolver resolver = getContentResolver();
// 获得图片的uri(uri--->content://media/external/images/media/21275)
Uri originalUri = data.getData();
// 得到bitmap图片!!!
final Bitmap bm = MediaStore.Images.Media.getBitmap(resolver,originalUri);
// //得到扫描框
// Rect frame = CameraManager.get().getFramingRect();
//
// //获取屏幕的宽高(display.getWidth(),display.getHeight())
// WindowManager manager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
// Display display = manager.getDefaultDisplay();
//
// //图片缩放
// Bitmap newbmp = zoomBitmap(bm,frame.height(), frame.width());
// Log.i("TAG", "newbmp:width---->"+newbmp.getWidth()+"height--->"+ newbmp.getHeight());
//
// //bitmap转换byte[]
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// newbmp.compress(Bitmap.CompressFormat.PNG,100,baos);
//