• 图文解说 ChinaCock 华为扫描


    随着Delphi 10.4.2发布,ChinaCock作者也紧随其后,发布了支持10.4.2的版本:ChinaCock10.4.2百年建党童心向党版.从名字看作者是一个爱国主义者,让人敬佩!不仅如此,为了支持华为,作者在此版本中集成了华为扫描。接下来,我们通过组件包带的例子,看看如何在app中集成华为扫描。

    首先,打开例子项目:...ChinaCockFMXdemosCCHuaweiScanner,打开后,会看到在主窗口上有一个CCHuaweiScanner1组件:

     再看看这个组件的属性:

     PlayVoice:扫码时是否播放声音

    ScanSuccessdedFile:播放的声音文件,默认:scan_succeeded.mp3

    ToastResult:是否显示扫描结果

    Vibrate:是否震动

    VibrateDuartion:震动周期,默认200

    属性不多,想你也一看就明白。

    接下来,我们看看执行描扫的代码:

    procedure TForm1.CCButton1Click(Sender: TObject);
    begin
    
      PermissionsService.RequestPermissions
        ([JStringToString(TJManifest_permission.JavaClass.CAMERA),
        JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),
        JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],
        procedure(const APermissions: TArray<string>;
          const AGrantResults: TArray<TPermissionStatus>)
        begin
          if (Length(AGrantResults) = 3) then // 为什么为3?因为只申请了3个权限,返回肯定判断3个
          begin
            // 三个全选都允许了,才能拍照
            if (AGrantResults[0] = TPermissionStatus.Granted) and
              (AGrantResults[1] = TPermissionStatus.Granted) and
              (AGrantResults[2] = TPermissionStatus.Granted) then
            begin
    
              CCHuaweiScanner1.ToastResult := self.CCCheckBox1.IsChecked;
              CCHuaweiScanner1.Vibrate := self.CCCheckBox2.IsChecked;
              CCHuaweiScanner1.PlayVoice := self.CCCheckBox3.IsChecked;
              CCHuaweiScanner1.StartScan(//启动扫描方法,开始扫描,同时加入一个回调方法,接收描扫结果:
                procedure(AResult: String)
                begin
                  Memo1.lines.Add(AResult);
                end
                );
            end
            else
            begin
    
            end;
    
          end;
        end);
    end;

    这里需要说明一下,该组件,还有一个事件:OnScanResultCallbackEvent,扫描结果回调事件,从名子就能看出,执行完扫描时触发,跟StartScan方法的支持的回调过程参数是一样的。

    该组件的使用方法,就介绍完了,用起来简单的不能再简单。

    接下来,看看比较麻烦的步骤,如何发布需要的文件:

    首先,在项目管理器中加入控件使用的jar文件,如下图:

     这些文件在X:ChinaCockFMXsdkHuaWeiScanner文件夹下,一共是13个文件:

    然后,发布控件使用的资源文件及so文件:

    要想操作简单,可以参考我以前写的文章,DeployMan,发布文件的利器,一次性发布整个文件夹中的文件。

    最后,别忘修改AndroidManifest.template.xml,加入相应的权限与Activity:

    <?xml version="1.0" encoding="utf-8"?>
    <!-- BEGIN_INCLUDE(manifest) -->
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="%package%"
            android:versionCode="%versionCode%"
            android:versionName="%versionName%"
            android:installLocation="%installLocation%">
    
        <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />
        <%uses-permission%>
    
    
        <!--相机权限-->
        <uses-permission android:name="android.permission.CAMERA" />
        <!--读文件权限-->
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <!--使用特性-->
        <uses-feature android:name="android.hardware.camera" />
        <uses-feature android:name="android.hardware.camera.autofocus" />
        <uses-permission android:name="android.permission.VIBRATE"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    
    
        <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
        <application android:persistent="%persistent%" 
            android:restoreAnyVersion="%restoreAnyVersion%" 
            android:label="%label%" 
            android:debuggable="%debuggable%" 
            android:largeHeap="%largeHeap%"
            android:icon="%icon%"
            android:theme="%theme%"
            android:hardwareAccelerated="%hardwareAccelerated%"
            android:resizeableActivity="false">
    
            <%provider%>
            <%application-meta-data%>
            <%uses-libraries%>
            <%services%>
            <!-- Our activity is a subclass of the built-in NativeActivity framework class.
                 This will take care of integrating with our NDK code. -->
            <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                    android:label="%activityLabel%"
                    android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
                    android:launchMode="singleTask">
                <!-- Tell NativeActivity the name of our .so -->
                <meta-data android:name="android.app.lib_name"
                    android:value="%libNameValue%" />
                <intent-filter>  
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter> 
            </activity>
    
            <activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />
    
            <%activity%>
            <%receivers%>
    
    
    
    
        </application>
    </manifest>
    <!-- END_INCLUDE(manifest) -->
  • 相关阅读:
    JS window对象 Navigator对象 Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本。
    JS window对象 返回下一个浏览的页面 forward()方法,加载 history 列表中的下一个 URL。
    JS window对象 取消计时器clearTimeout() setTimeout()和clearTimeout()一起使用,停止计时器。 语法: clearTimeout(id_of_setT
    JS window对象 History 对象 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏览器前进与后退相似导航的功能。语法: window.history.[属性|方法]
    JS window对象 返回前一个浏览的页面 back()方法,加载 history 列表中的前一个 URL。 语法: window.history.back();
    JS window对象 计时器setTimeout() setTimeout()计时器,在载入后延迟指定时间后,去执行一次表达式,仅执行一次。 语法: setTimeout(代码,延迟时间);
    JS window对象取消计时器clearInterval() clearInterval() 方法可取消由 setInterval() 设置的交互时间。
    ELK问题处理
    nginx 日志变量含义
    nginx ssl 更换问题
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14563308.html
Copyright © 2020-2023  润新知