Android 10 では、QR コードとバーコードのスキャンと、生成されたフォルダーへのデータの取得が実装されています。

まず 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+ "" );
        }
    }
}

 

おすすめ

転載: blog.csdn.net/weixin_43392545/article/details/114932453