먼저 Huawei HMS Scankit을 통합하십시오.
//打开AndroidStudio项目级build.gradle文件 在allprojects ->repositories里面配置HMS SDK的maven仓地址
allprojects {
repositories {
google()
jcenter()
maven {url 'http://developer.huawei.com/repo/'}
}
}
//在buildscript->repositories里面配置HMS SDK的maven仓地址
buildscript {
repositories {
google()
jcenter()
maven {url 'http://developer.huawei.com/repo/'}
}
}
//打开应用级的build.gradle文件集成SDK
dependencies{
implementation 'com.huawei.hms:scan:1.1.3.301'
}
//指定权限和特性
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name= "android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
//AndroidManifest.xml清单文件中对扫码页面进行声明
<activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />
//使用旧版本文件操作需要在application添加属性:
android:requestLegacyExternalStorage="true"
특정 코드:
1. SQLite 동작 데이터
public class DataBaseOperation {
private final String TAG = "DataBaseOperation: ";
private SQLiteDatabase db;
private Context context;
public DataBaseOperation(Context context, SQLiteDatabase db) {
this.db = db;
this.context = context;
}
//数据库的打开或创建 db name student.db
public void create_db() {
db = SQLiteDatabase.openOrCreateDatabase(context.getFilesDir().toString() + "/student.db", null);
if (db == null) { //判断数据库是否创建成功
System.out.println(TAG + "数据库创建失败" );
}
//创建表,tab name 名称为 record ,主键id
db.execSQL("create table if not exists record(_id integer primary key autoincrement,"
+ "name varchar(30)," // 姓名
+ "id text" + ")");//学号
System.out.println(TAG + "数据库创建成功" );
}
//插入备忘录信息到数据库
public void insert_db(String name,String id) {
db.execSQL("insert into record(name,id) values('"
+ name //姓名
+ "','"
+ id //学号
+ "');");
System.out.println(TAG + "插入新的数据库信息" );
}
//根据学号 更新学生 one 的 姓名
public void update_one( String name,int age , String id) {
db.execSQL("update record set name='" + name
+ "','"
+ "'where id='" + id + "'");
System.out.println(TAG + "修改学生 one 资料" );
}
//查询所有内容
public Cursor query_db() {
Cursor cursor = db.rawQuery("select * from record", null);
System.out.println(TAG + "查找全部数据库信息" );
return cursor;
}
//根据性别查找
public Cursor query_name(String name) {
Cursor cursor = db.rawQuery("select * from record where name='" + name
+ "';", null);
System.out.println(TAG + "根据性别查找" + name );
return cursor;
}
// select * from 表名 where 学号 between '开始学号' and '结束学号' // 学号段查询
// public Cursor query_duing_id(String startid, String endid) {
// Cursor cursor = db.rawQuery("select * from record where id >='" + startid + "'and timeedit<='"
// + endid + "';", null);
// System.out.println(TAG + "学号段查询" );
// return cursor;
// }
// select * from 表名 where content like '%abc%' //模糊查询 查找全表中 姓名包含 关键字的学生
// public Cursor query_content(String keword) {
// Cursor cursor = db.rawQuery("select * from record where name like '%"
// + keword + "%';", null);
//
// System.out.println(TAG + "关键字模糊查询" );
// return cursor;
// }
//根据学号 删除 学生 two
// public void delate_two( String id ) {
// db.execSQL("delete from record where id='" + id + "'");
// System.out.println(TAG + "删除学生 two");
// }
//删除表全部内容 不删除表
public void delate_all( ) {
db.execSQL("delete from record" );
System.out.println(TAG + "清空表内容");
}
// 关闭数据库
public void close_db() {
db.close();
System.out.println(TAG + "关闭数据库");
}
}
2 활동 코드
public class MainActivity extends AppCompatActivity {
private int CAMERA_REQ_CODE;
private int DECODE;
private int REQUEST_CODE_SCAN_ONE =1;
private SQLiteDatabase db;
private DataBaseOperation dop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setStatusBarColor(Color.TRANSPARENT);//设置状态栏透明
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//设置为深色字体
dop = new DataBaseOperation(this, db); //实例化数据库对象
}
//点击扫描按钮 开启授权
public void loadScanKitBtnClick(View view) {
requestPermission(CAMERA_REQ_CODE, DECODE);
}
// 请求权限
private void requestPermission(int requestCode, int mode) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, requestCode);
}
//授权结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (permissions == null || grantResults == null) {
return;
}
if (grantResults.length < 2 || grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
return;
}
if (requestCode == CAMERA_REQ_CODE) {
// QRCODE_SCAN_TYPE 是二维码;ALL_SCAN_TYPE 条形码和二维码都支持
ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create());
}
}
//扫描结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK || data == null) {
return;
}
if (requestCode == REQUEST_CODE_SCAN_ONE) {
HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
if (obj != null) {
dop.create_db();
Cursor cursor = dop.query_name(obj.originalValue);
System.out.print(cursor.getCount());
if (cursor.getCount() > 0){//如果数据库里查询到数据
dop.close_db();
Toast.makeText(this, "数据重复", Toast.LENGTH_SHORT).show();
}else{
Cursor cursorall = dop.query_db();
String index = String.valueOf(cursorall.getCount());
dop.insert_db(obj.originalValue,index);
dop.close_db();
Toast.makeText(this, "数据添加成功", Toast.LENGTH_SHORT).show();
}
}
}
}
// 删除数据按钮 删除所有数据
public void delBtnClick(View view){
dop.create_db();
dop.delate_all();
dop.close_db();
Toast.makeText(this, "数据删除成功", Toast.LENGTH_SHORT).show();
}
//获取存储数据按钮 查询所有数据并写入文件
public void lookBtnClick(View view){
dop.create_db();
Cursor cursor = dop.query_db();
if (cursor.getCount() > 0) { //如果数据库里查询到数据
Date date=new Date(System.currentTimeMillis());
SimpleDateFormat formatterDIR= new SimpleDateFormat("yyyyMMdd");
String DIRname=formatterDIR.format(date);
SimpleDateFormat formatter= new SimpleDateFormat("HHmmss");
String txtname=formatter.format(date);
String filePath = "/sdcard/QRCODE/"+DIRname+"/";//根据日期不同生成不同的文件夹
String fileName = txtname+".txt"; //以当前时间时分秒为文件名称
while (cursor.moveToNext()) {// 光标移动成功
String str_name = cursor.getString(cursor.getColumnIndex("name")); // 获得姓名
String str_id = cursor.getString(cursor.getColumnIndex("id")); // 获得学号
writeTxtToFile(str_name, filePath, fileName);
}
Toast.makeText(this, "成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show();
}
dop.close_db();
}
// 将字符串写入到文本文件中
public void writeTxtToFile(String strcontent, String filePath, String fileName) {
//生成文件夹之后,再生成文件,不然会出错
makeFilePath(filePath, fileName);
String strFilePath = filePath+fileName;
// 每次写入时,都换行写
String strContent = strcontent + "\r\n";
try {
File file = new File(strFilePath);
if (!file.exists()) {
Log.d("TestFile", "Create the file:" + strFilePath);
file.getParentFile().mkdirs();
file.createNewFile();
}
RandomAccessFile raf = new RandomAccessFile(file, "rwd");
raf.seek(file.length());
raf.write(strContent.getBytes());
raf.close();
} catch (Exception e) {
Log.e("TestFile", "Error on write File:" + e);
}
}
// 生成文件
public File makeFilePath(String filePath, String fileName) {
File file = null ;
makeRootDirectory(filePath);
try {
file = new File(filePath + fileName);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return file;
}
// 生成文件夹
public static void makeRootDirectory(String filePath) {
File file = null ;
try {
file = new File(filePath);
if (!file.exists()) {
file.mkdir();
Log.i( "a:" , "ok" );
}
} catch (Exception e) {
Log.i( "error:" , e+ "" );
}
}
}