page_qr.java
9.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
package etelligens.com.foodsafety;
import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Vibrator;
import android.provider.Settings;
import android.util.LruCache;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;
import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zbar.ZBarView;
import etelligens.com.foodsafety.activities.dashboard.Dashboard;
import etelligens.com.foodsafety.fragments.PrinterSettingsMileageFrag;
import static etelligens.com.foodsafety.activities.dashboard.SharedHelper.sharedPreferences;
public class page_qr extends AppCompatActivity {
QRCodeView qrCodeView;
String[] permissions = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.VIBRATE
};
private final int permissionCode = 100;//权限请求码
//检查权限
private void checkPermission() {
List<String> permissionList = new ArrayList<>();
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(permissions[i]);
}
}
if (permissionList.size() <= 0) {
//说明权限都已经通过,可以做你想做的事情去
bindEvent();
} else {
//存在未允许的权限
ActivityCompat.requestPermissions(this, permissions, permissionCode);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean haspermission = false;
if (permissionCode == requestCode) {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == -1) {
haspermission = true;
}
}
if (haspermission) {
//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问
permissionDialog();
} else {
//全部权限通过,可以进行下一步操作
bindEvent();
}
}
}
AlertDialog alertDialog;
//打开手动设置应用权限
private void permissionDialog() {
if (alertDialog == null) {
alertDialog = new AlertDialog.Builder(this)
.setTitle("提示信息")
.setMessage("当前应用缺少必要权限,该功能暂时无法使用。如若需要,请单击【确定】按钮前往设置中心进行权限授权。")
.setPositiveButton("设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
cancelPermissionDialog();
Uri packageURI = Uri.parse("package:" + getPackageName());
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
startActivity(intent);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
cancelPermissionDialog();
}
})
.create();
}
alertDialog.show();
}
private void cancelPermissionDialog() {
alertDialog.cancel();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page_qr);
//6.0才用动态权限
if (Build.VERSION.SDK_INT >= 23) {
checkPermission();
} else {
bindEvent();
}
}
private void bindEvent() {
qrCodeView = (ZBarView) findViewById(R.id.zbarview);
qrCodeView.setDelegate(new QRCodeView.Delegate() {
@Override
public void onScanQRCodeSuccess(String result) {
vibrate();//震动手机
//扫描成功后处理事件
Toast.makeText(page_qr.this, result, Toast.LENGTH_SHORT).show();
// qrCodeView.startSpot();//继续扫描
// 获取 SharedPreferences 对象
SharedPreferences.Editor editor = getSharedPreferences("RechargeNumberFile",MODE_PRIVATE).edit();
// 存储数据(键值对)
editor.putString("rechargeNumber", result);// 存储字符串
// 应用编辑(提交保存)
editor.apply();
// LruCache<String, String> memoryCache = new LruCache<>(100);
// memoryCache.put("consumableNumber", result);
Intent intent = new Intent(page_qr.this, Dashboard.class);
intent.putExtra("fragmentId",1);
startActivity(intent);
//finish();
TextView txtText = (TextView) findViewById(R.id.txtText);
txtText.setText(result);
}
@Override
public void onCameraAmbientBrightnessChanged(boolean isDark) {
// 这里是通过修改提示文案来展示环境是否过暗的状态,接入方也可以根据 isDark 的值来实现其他交互效果
String tipText = qrCodeView.getScanBoxView().getTipText();
String ambientBrightnessTip = "\n环境过暗,请打开闪光灯";
if (isDark) {
if (!tipText.contains(ambientBrightnessTip)) {
qrCodeView.getScanBoxView().setTipText(tipText + ambientBrightnessTip);
}
} else {
if (tipText.contains(ambientBrightnessTip)) {
tipText = tipText.substring(0, tipText.indexOf(ambientBrightnessTip));
qrCodeView.getScanBoxView().setTipText(tipText);
}
}
}
@Override
public void onScanQRCodeOpenCameraError() {
Toast.makeText(page_qr.this, "错误", Toast.LENGTH_SHORT).show();
}
});
qrCodeView.startCamera();
findViewById(R.id.end_spot).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(page_qr.this, Dashboard.class);
intent.putExtra("fragmentId",1);
startActivity(intent);
//finish();
}
});
findViewById(R.id.start_spot).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onStart();
Toast.makeText(page_qr.this, "开始扫码", Toast.LENGTH_SHORT).show();
}
});
findViewById(R.id.stop_spot).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onStop();
Toast.makeText(page_qr.this, "停止扫码", Toast.LENGTH_SHORT).show();
}
});
findViewById(R.id.open_flashlight).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
qrCodeView.openFlashlight();
Toast.makeText(page_qr.this, "打开闪光灯", Toast.LENGTH_SHORT).show();
}
});
findViewById(R.id.close_flashlight).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
qrCodeView.closeFlashlight();
Toast.makeText(page_qr.this, "关闭闪光灯", Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onStart() {
super.onStart();
qrCodeView.startCamera();//打开后置摄像头开始预览,但是并未开始识别
qrCodeView.startSpotAndShowRect(); // 显示扫描框,并开始识别
// mQRCodeView.showScanRect();//显示扫描框
// mQRCodeView.startSpot();//开始识别二维码
//mQRCodeView.openFlashlight();//开灯
//mQRCodeView.closeFlashlight();//关灯
}
@Override
protected void onStop() {
qrCodeView.stopCamera();// 关闭摄像头预览,并且隐藏扫描框
super.onStop();
}
@Override
protected void onDestroy() {
qrCodeView.onDestroy();
super.onDestroy();
}
private void vibrate() {
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(200);
}
}