在 Zebra 条码扫描器上使用 DataWedge 进行多项活动在 Kotlin 中不起作用
Using DataWedge for Multiple Activities on Zebra Barcode Scanner doesn't work in Kotlin
我正在 Kotlin 中为 Zebra 条码扫描器开发一个应用程序,我需要在多个活动中扫描条码。此刻我正在尝试使用 DataWedge。我遵循了本教程:https://github.com/darryncampbell/DataWedge-GettingStarted-Samples 非常适合 Activity。但问题在于多项活动。我的想法是在 Main Activity 中创建 DatWedge 配置文件,然后我需要在第二个和第三个活动中扫描条码(第三个 activity 与第二个相同)。有可能吗?
当我按下硬按钮时,设备会发出哔哔声,但 TextView 中什么也没有显示,甚至日志也不起作用。
我只是用硬触发,所以不需要用软扫描。
这是 MainActivity。 DWUtilities 对象与教程中的相同。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
DWUtilities.CreateDWProfile(this)
val btnScan = findViewById<Button>(R.id.btnScan)
btnScan.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
}
这是第二个Activity。 Activity 仅包含按钮和 textView。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val btnSec = findViewById<Button>(R.id.btnScanSecond)
btnSec.setOnClickListener {
val intent = Intent(this, ThirdActivity::class.java)
startActivity(intent)
}
}
override fun onNewIntent(intentSken: Intent) {
super.onNewIntent(intentSken)
displayScanResult(intentSken)
}
private fun displayScanResult(scanIntent: Intent) {
val decodedSource =
scanIntent.getStringExtra(resources.getString(R.string.datawedge_intent_key_source))
val decodedData =
scanIntent.getStringExtra(resources.getString(R.string.datawedge_intent_key_data))
val decodedLabelType = scanIntent.getStringExtra(resources.getString(R.string.datawedge_intent_key_label_type))
val scan = "$decodedData [$decodedLabelType]\n\n"
val output = findViewById<TextView>(R.id.txtOutputSecond)
output.text = scan + output.text
Log.d("Scan", "$scan")
}
这是显而易见的。其实我认为这个清单应该有问题,但我不确定。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ThirdActivity"
android:exported="false"
android:launchMode="singleTop">
<intent-filter>
<action android:name="com.darryncampbell.datawedge.kotlin.ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:exported="false"
android:launchMode="singleTop">
<intent-filter>
<action android:name="com.darryncampbell.datawedge.kotlin.ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
在您发布的教程中,此行:https://github.com/darryncampbell/DataWedge-GettingStarted-Samples/blob/master/Kotlin/app/src/main/java/com/darryncampbell/dwgettingstartedkotlin/DWUtilities.kt#L40 导致 DataWedge 配置文件应用于应用程序中的所有活动。您可以在此处指定一个 activity 以仅将设置应用于单个 activity、com.darryncampbell.dwgettingstartedkotlin.MainActivity
。然后,您可以定义多个 DataWedge 配置文件,因此应用程序中的每个 activity 都可以拥有自己的配置文件和自己的设置。
另一个考虑因素是您如何配置 Intent 输出插件,本教程将其作为 startActivity 发送。您可以在每个活动中使用不同的意图过滤器,每个活动都注册不同的操作,或者您可以更改配置文件以调用 sendBroadcast 并在每个活动中都有一个广播接收器来接收扫描。
我正在 Kotlin 中为 Zebra 条码扫描器开发一个应用程序,我需要在多个活动中扫描条码。此刻我正在尝试使用 DataWedge。我遵循了本教程:https://github.com/darryncampbell/DataWedge-GettingStarted-Samples 非常适合 Activity。但问题在于多项活动。我的想法是在 Main Activity 中创建 DatWedge 配置文件,然后我需要在第二个和第三个活动中扫描条码(第三个 activity 与第二个相同)。有可能吗? 当我按下硬按钮时,设备会发出哔哔声,但 TextView 中什么也没有显示,甚至日志也不起作用。
我只是用硬触发,所以不需要用软扫描。 这是 MainActivity。 DWUtilities 对象与教程中的相同。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
DWUtilities.CreateDWProfile(this)
val btnScan = findViewById<Button>(R.id.btnScan)
btnScan.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
}
这是第二个Activity。 Activity 仅包含按钮和 textView。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val btnSec = findViewById<Button>(R.id.btnScanSecond)
btnSec.setOnClickListener {
val intent = Intent(this, ThirdActivity::class.java)
startActivity(intent)
}
}
override fun onNewIntent(intentSken: Intent) {
super.onNewIntent(intentSken)
displayScanResult(intentSken)
}
private fun displayScanResult(scanIntent: Intent) {
val decodedSource =
scanIntent.getStringExtra(resources.getString(R.string.datawedge_intent_key_source))
val decodedData =
scanIntent.getStringExtra(resources.getString(R.string.datawedge_intent_key_data))
val decodedLabelType = scanIntent.getStringExtra(resources.getString(R.string.datawedge_intent_key_label_type))
val scan = "$decodedData [$decodedLabelType]\n\n"
val output = findViewById<TextView>(R.id.txtOutputSecond)
output.text = scan + output.text
Log.d("Scan", "$scan")
}
这是显而易见的。其实我认为这个清单应该有问题,但我不确定。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ThirdActivity"
android:exported="false"
android:launchMode="singleTop">
<intent-filter>
<action android:name="com.darryncampbell.datawedge.kotlin.ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:exported="false"
android:launchMode="singleTop">
<intent-filter>
<action android:name="com.darryncampbell.datawedge.kotlin.ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
在您发布的教程中,此行:https://github.com/darryncampbell/DataWedge-GettingStarted-Samples/blob/master/Kotlin/app/src/main/java/com/darryncampbell/dwgettingstartedkotlin/DWUtilities.kt#L40 导致 DataWedge 配置文件应用于应用程序中的所有活动。您可以在此处指定一个 activity 以仅将设置应用于单个 activity、com.darryncampbell.dwgettingstartedkotlin.MainActivity
。然后,您可以定义多个 DataWedge 配置文件,因此应用程序中的每个 activity 都可以拥有自己的配置文件和自己的设置。
另一个考虑因素是您如何配置 Intent 输出插件,本教程将其作为 startActivity 发送。您可以在每个活动中使用不同的意图过滤器,每个活动都注册不同的操作,或者您可以更改配置文件以调用 sendBroadcast 并在每个活动中都有一个广播接收器来接收扫描。