【问题标题】:Trigger scanning on a Zebra TC25 with an Android Delphi application使用 Android Delphi 应用程序在 Zebra TC25 上触发扫描
【发布时间】:2021-02-05 10:38:13
【问题描述】:

我正在使用 Embarcadero RAD Studio 10.2 开发一个 Android 应用程序,以部署在 Zebra TC25 上。 我正在尝试通过单击屏幕上的按钮来激活扫描仪。 (就像按下垫两侧的黄色按钮)

procedure TMainForm.btnScanClick(Sender: TObject);
var
  Intent: JIntent; //Declares the intent object
begin
  try
    Intent := TJIntent.Create;
    Intent.setType(StringToJString('text/pas'));
    Intent.setAction(StringToJString('com.symbol.datawedge.api.ACTION')); 
    Intent.putExtra(StringToJString('com.symbol.datawedge.api.SOFT_SCAN_TRIGGER'), StringtoJString('START_SCANNING'));
    if MainActivity.getPackageManager.queryIntentActivities(Intent, TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size > 0 then
      MainActivity.startActivity(Intent) //Calls startActivity() to send the intent to the system.
    else
      mmLogs.Lines.Add('Erreur: '+DateTimeToStr(now)+' - Receiver not found');
  except
    on E:Exception do
      mmLogs.Lines.Add('Erreur: '+DateTimeToStr(now)+' - btnScanClick - '+E.Message);
  end;
end;

这是 Activity 部分的 AndroidManifest 内容。

<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> 
    <intent-filter>
        <action android:name="com.wa.ZebraDW.ACTION" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter> 
</activity>

我从中获得了灵感:

我总是在备忘录中收到有关“找不到接收器”的错误消息。设备未开始扫描。

【问题讨论】:

  • 当您说“没有任何反应”时,您的意思是设备没有开始扫描吗?也大概你的错误信息没有出现在备忘录中?
  • 什么都没有发生,因为您需要将 Intent 作为广播 Intent 发送,但您的应用程序正在使用 Intent 调用 startActivity()。是否有 MainActivity.sendBroadcast(Intent)?
  • 是的,设备没有开始扫描。错误消息出现在备忘录中。
  • 是的,有 MainActivity.sendBroadcast(Intent)。我试图用这个替换 startActivity 但目前问题就在之前。

标签: android delphi barcode barcode-scanner


【解决方案1】:

这适用于 Delphi 10.3 和经过测试的 Zebra TC56/TC55 设备。 AndroidManifest 保持不变,无需任何额外条目。

procedure TForm1.btnTriggerScanClick(Sender: TObject);
var Intent: JIntent;
begin
  Intent := TJIntent.JavaClass.init;
  Intent.setAction(StringToJString('com.symbol.datawedge.api.ACTION_SOFTSCANTRIGGER'));
  Intent.putExtra(StringToJString('com.symbol.datawedge.api.EXTRA_PARAMETER'), StringToJString('START_SCANNING'));
  TAndroidHelper.Activity.sendBroadcast(Intent);
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多