|
@@ -1,11 +1,15 @@
|
|
|
package me.yoqi.android.barcode;
|
|
|
|
|
|
import android.Manifest;
|
|
|
+import android.app.Activity;
|
|
|
import android.content.Context;
|
|
|
import android.content.Intent;
|
|
|
+import android.content.pm.ActivityInfo;
|
|
|
import android.content.pm.PackageManager;
|
|
|
import android.graphics.Bitmap;
|
|
|
+import android.graphics.Point;
|
|
|
import android.os.Bundle;
|
|
|
+import android.view.Display;
|
|
|
import android.view.View;
|
|
|
import android.widget.Toast;
|
|
|
|
|
@@ -37,6 +41,7 @@ public class MainActivity extends AppCompatActivity implements ZxingScanView.OnS
|
|
|
ResultMetadataType.SUGGESTED_PRICE,
|
|
|
ResultMetadataType.ERROR_CORRECTION_LEVEL,
|
|
|
ResultMetadataType.POSSIBLE_COUNTRY);
|
|
|
+
|
|
|
private ZxingScanView mVScan;
|
|
|
private ZxingForegroundView mVForeground;
|
|
|
|
|
@@ -47,7 +52,12 @@ public class MainActivity extends AppCompatActivity implements ZxingScanView.OnS
|
|
|
@Override
|
|
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
|
super.onCreate(savedInstanceState);
|
|
|
- setContentView(R.layout.activity_main);
|
|
|
+ //判断屏幕方向
|
|
|
+ if (screenOrient(this) == 0) {
|
|
|
+ setContentView(R.layout.activity_main__landscape);
|
|
|
+ } else {
|
|
|
+ setContentView(R.layout.activity_main);
|
|
|
+ }
|
|
|
|
|
|
Toolbar toolbar = findViewById(R.id.zsv_toolbar);
|
|
|
toolbar.setVisibility(View.GONE);
|
|
@@ -57,7 +67,6 @@ public class MainActivity extends AppCompatActivity implements ZxingScanView.OnS
|
|
|
mVScan.addOnScanListener(this);
|
|
|
}
|
|
|
|
|
|
- // Listener
|
|
|
@Override
|
|
|
public void onError(ZxingScanView scanView) {
|
|
|
switch (scanView.getErrorCode()) {
|
|
@@ -67,8 +76,7 @@ public class MainActivity extends AppCompatActivity implements ZxingScanView.OnS
|
|
|
break;
|
|
|
case ZxingScanView.ERROR_CODE_1:
|
|
|
// 缺少打开相机的权限
|
|
|
- if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
|
|
|
- Manifest.permission.CAMERA)) {
|
|
|
+ if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
|
|
|
ActivityCompat.requestPermissions(this,
|
|
|
new String[]{Manifest.permission.CAMERA},
|
|
|
PERMISSIONS_REQUEST_CAMERA);
|
|
@@ -77,9 +85,16 @@ public class MainActivity extends AppCompatActivity implements ZxingScanView.OnS
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 扫描结果监听器
|
|
|
+ *
|
|
|
+ * @param scanView ZxingScanView
|
|
|
+ * @param result 结果 扫描结果
|
|
|
+ * @param barcode 图片 条码图片
|
|
|
+ * @param scaleFactor 缩放比
|
|
|
+ */
|
|
|
@Override
|
|
|
- public void onResult(ZxingScanView scanView, Result result, Bitmap barcode,
|
|
|
- float scaleFactor) {
|
|
|
+ public void onResult(ZxingScanView scanView, Result result, Bitmap barcode, float scaleFactor) {
|
|
|
ParsedResult parsedResult = ResultParser.parseResult(result);
|
|
|
final String format = "format:" + result.getBarcodeFormat().toString();
|
|
|
final String type = "type:" + parsedResult.getType().toString();
|
|
@@ -107,18 +122,35 @@ public class MainActivity extends AppCompatActivity implements ZxingScanView.OnS
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
|
|
|
- @NonNull int[] grantResults) {
|
|
|
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
|
- switch (requestCode) {
|
|
|
- case PERMISSIONS_REQUEST_CAMERA: {
|
|
|
- if (grantResults.length > 0
|
|
|
- && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
|
- mVScan.open();
|
|
|
- } else {
|
|
|
- mVForeground.setMode(ZxingForegroundView.MODE_ERROR);
|
|
|
- }
|
|
|
+
|
|
|
+ if (requestCode == PERMISSIONS_REQUEST_CAMERA) { //获取照相机权限
|
|
|
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
|
+ mVScan.open(); // 打开摄像头
|
|
|
+ } else {
|
|
|
+ mVForeground.setMode(ZxingForegroundView.MODE_ERROR);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判定当前的屏幕是竖屏还是横屏
|
|
|
+ *
|
|
|
+ * @param activity 当前activity对象
|
|
|
+ * @return orient 0横屏,1竖屏
|
|
|
+ */
|
|
|
+ public int screenOrient(Activity activity) {
|
|
|
+ int orient = activity.getRequestedOrientation();
|
|
|
+ //获取屏幕方向,但是如果关闭反转屏幕,则不会反转。但是手机确实翻转了,所以需要手动根据屏幕长宽比判断
|
|
|
+ if (orient != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE && orient != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
|
|
|
+ Display display = activity.getWindowManager().getDefaultDisplay();
|
|
|
+ Point outSize = null;
|
|
|
+ display.getSize(outSize);
|
|
|
+ int screenWidth = outSize.x; //宽
|
|
|
+ int screenHeight = outSize.y; //高
|
|
|
+ orient = screenWidth > screenHeight ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; //宽>高:横屏
|
|
|
+ }
|
|
|
+ return orient;
|
|
|
+ }
|
|
|
}
|