kinglandsoft

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

首先,打开例子项目:...\ChinaCock\FMX\demos\CCHuaweiScanner,打开后,会看到在主窗口上有一个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:\ChinaCock\FMX\sdk\HuaWei\Scanner文件夹下,一共是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) -->

 

分类:

技术点:

相关文章:

  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2021-12-07
  • 2022-12-23
  • 2021-12-05
  • 2021-08-13
  • 2021-12-21
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
  • 2021-11-29
  • 2022-02-12
  • 2021-08-07
相关资源
相似解决方案