PS:有的朋友可能會(huì)掃描出現(xiàn)問題冠摄,如果報(bào)異橙的“SecurityException”同時(shí)讀者又確切的把相機(jī)權(quán)限加上去了,這時(shí)候請檢查浙滤,你的設(shè)備是不是6.0阴挣,或者6.0以后,這里面牽扯到一個(gè)動(dòng)態(tài)權(quán)限的問題纺腊。需要增加一段代碼畔咧。在文章里我注釋掉了,打開注釋即可揖膜。
這個(gè)是安卓6.0 以后的需要調(diào)用某些設(shè)備的時(shí)候需要?jiǎng)討B(tài)增加權(quán)限誓沸,是安全問題提升的一個(gè)表現(xiàn)
開發(fā)工具:AS
作為伸手黨,首先感謝開源庫的作者GuoJinyu壹粟,有興趣的可以前去學(xué)習(xí)拜隧,
1.添加依賴
compile 'com.acker:simplezxing:1.2'
2.在需要的地方調(diào)用:(這里需要注意,如果你的設(shè)別API很高,在6.0虹蓄,可能需要?jiǎng)討B(tài)申請權(quán)限)
if (Build.VERSION.SDK_INT >= 23) {
int checkCallPhonePermission =
ContextCompat.checkSelfPermission(ZXingActivity.this,Manifest.permission.CAMERA);
if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(ZXingActivity.this, new String[]{Manifest.permission.CAMERA}, 222);
return;
} else {
startCamera();
}
} else {
startCamera();
}
startCamera() 方法如下:
private void startCamera() {
Intent intent = new Intent(this, CaptureActivity.class);
Bundle bundle = new Bundle();
bundle.putBoolean(CaptureActivity.KEY_NEED_BEEP, CaptureActivity.VALUE_BEEP);
bundle.putBoolean(CaptureActivity.KEY_NEED_VIBRATION, CaptureActivity.VALUE_VIBRATION);
bundle.putBoolean(CaptureActivity.KEY_NEED_EXPOSURE, CaptureActivity.VALUE_NO_EXPOSURE);
bundle.putByte(CaptureActivity.KEY_FLASHLIGHT_MODE, CaptureActivity.VALUE_FLASHLIGHT_OFF);
bundle.putByte(CaptureActivity.KEY_ORIENTATION_MODE, CaptureActivity.VALUE_ORIENTATION_AUTO);
intent.putExtra(CaptureActivity.EXTRA_SETTING_BUNDLE, bundle);
startActivityForResult(intent, CaptureActivity.REQ_CODE);
}
3.重寫onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String scanInfo;
switch (requestCode) {
case CaptureActivity.REQ_CODE:
scanInfo = data.getStringExtra(CaptureActivity.EXTRA_SCAN_RESULT);
switch (resultCode) {
case RESULT_OK:
Log.d(TAG,scanInfo); //or do sth
mTextView.setText(scanInfo);
break;
case RESULT_CANCELED:
if (data != null) {
// for some reason camera is not working correctly
Log.d(TAG,data.getStringExtra(CaptureActivity.EXTRA_SCAN_RESULT));
}
break;
}
break;
}
}
對"第3步"onActivityResult 方法中 data 解釋:
data.getStringExtra(CaptureActivity.EXTRA_SCAN_RESULT); //這行用來接收二維碼信息
startCaptureActivityForResult()方法的配置信息在bundle參數(shù)描述的很詳細(xì)犀呼,可以參閱
最后別忘了權(quán)限問題
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>