说明
使用 chrome.documentScan API 从连接的文档扫描仪中发现和检索图片。
文档扫描 API 旨在允许应用和扩展程序查看连接的文档扫描仪上的纸质文档的内容。
权限
documentScan可用性
概念和用法
此 API 支持两种扫描文档的方式。如果您的使用情形适用于任何扫描器,并且不需要控制配置,请使用 scan() 方法。更复杂的用例需要结合使用多种方法,而这些方法仅在 Chrome 124 及更高版本中受支持。
简单扫描
对于简单用例(��可以使用任何扫描器且不需要控制配置的用例),请调用 scan()。此方法接受一个 ScanOptions 对象,并返回一个 Promise,该 Promise 会解析为一个 ScanResults 对象。此选项的功能仅限于扫描次数和调用方将接受的 MIME 类型。扫描结果以网址的形式返回,以便在用户界面的 <img> 标记中显示。
复杂扫描
复杂扫描分三个阶段完成,如本部分所述。 此概要并未介绍每种方法实参或响应中返回的每种属性。它仅旨在为您提供有关编写扫描器代码的一般指南。
发现
调用
getScannerList()。可用扫描器在 Promise 中返回,该 Promise 会解析为GetScannerListResponse。- 响应对象包含一个
ScannerInfo对象数组。 - 如果某个扫描器支持多种协议或连接方法,则该数组可能包含该扫描器的多个条目。
- 响应对象包含一个
从返回的数组中选择一个扫描器,并保存其
scannerId属性的值。使用各个
ScannerInfo对象的属性来区分同一扫描器的多个对象。来自同一扫描器的对象将具有相同的deviceUuid属性值。ScannerInfo还包含一个imageFormats属性,其中包含一个支持的图片类型数组。
扫描器配置
调用
openScanner(),并传入已保存的扫描器 ID。它会返回一个 Promise,该 Promise 会解析为OpenScannerResponse。响应对象包含:一个
scannerHandle属性,您需要保存该属性。一个包含扫描器专用属性的 options 属性,您需要设置这些属性。如需了解详情,请参阅“检索扫描器选项”。
(可选)如果您需要用户为扫描器选项提供值,请构建一个界面。您将需要上一步提供的扫描器选项,并且需要检索扫描器提供的选项组。如需了解详情,请参阅构建界面。
使用程序化值或用户提供的值构建
OptionSetting对象数组。如需了解详情,请参阅“设置扫描程序选项”。将
OptionSetting对象的数组传递给setOptions()以设置扫描器的选项。它会返回一个 Promise,该 Promise 会解析为SetOptionsResponse。此对象包含在扫描器配置的第 1 步中检索到的扫描器选项的更新版本。由于更改一个选项可能会改变另一个选项的限制,因此您可能需要多次重复这些步骤。
扫描
构造一个
StartScanOptions对象并将其传递给startScan()。它会返回一个 Promise,该 Promise 会解析为StartScanResponse。其job属性是一个句柄,您将使用该句柄来读取扫描数据或取消扫描。将作业句柄传递给
readScanData()。它会返回一个 Promise,该 Promise 会解析为一个ReadScanDataResponse对象。如果数据读取成功,则其result属性等于SUCCESS,并且其data属性包含扫描的一部分ArrayBuffer。请注意,estimatedCompletion包含截至目前已传送的总数据的估计百分比。重复上一步,直到
result属性等于EOF或出现错误。
当扫描结束时,使用在第 3 步中保存的扫描器句柄调用 closeScanner()。它会返回一个 Promise,该 Promise 会解析为 CloseScannerResponse。在创建作业后的任何时间调用 cancelScan() 都会结束扫描。
响应对象
所有方法都会返回一个 Promise,该 Promise 会解析为某种类型的响应对象。其中大多数都包含一个 result 属性,其值是 OperationResult 的成员。除非 result 的值是特定值,否则响应对象的某些属性不会包含值。这些关系在每个响应对象的参考文档中都有说明。
例如,只有当 OpenScannerResponse.result 等于 SUCCESS 时,OpenScannerResponse.scannerHandle 才会有值。
扫描器选项
��描器选项因设备而异。因此,无法直接在 documentScan API 中反映扫描器选项。为了解决此问题,OpenScannerResponse(使用 openScanner() 检索)和 SetOptionsResponse(setOptions() 的响应对象)包含一个 options 属性,该属性是一个包含扫描器特定选项的对象。每个选项都是一个键值映射,其中键是特定于设备的选项,值是 ScannerOption 的实例。
该结构大致如下所示:
{
"key1": { scannerOptionInstance }
"key2": { scannerOptionInstance }
}
例如,假设某个扫描器返回了名为“source”和“resolution”的选项。返回的 options 对象的结构将类似于以下示例。为简单起见,我们仅显示了部分 ScannerOption 响应。
{
"source": {
"name": "source",
"type": OptionType.STRING,
...
},
"resolution": {
"name": "resolution",
"type": OptionType.INT,
...
},
...
}
构建界面
虽然使用此 API 时不需要这样做,但您可能希望用户选择特定选项的值。这需要用户界面。使用 OpenScannerResponse(通过 openScanner() 打开)检索所连接扫描仪的选项,如上一部分中所述。
有些扫描器会以设备特定的方式对选项进行分组。它们不会影响选项行为,但由于扫描仪的产品文档中可能会提及这些群组,因此应向用户显示这些群组。您可以通过调用 getOptionGroups() 来检索这些群组。此方法会返回一个 Promise,该 Promise 会解析为一个 GetOptionGroupsResponse 对象。其 groups 属性包含一个特定于扫描器的群组数组。使用这些组中的信息来整理 OpenScannerResponse 中的选项以供显示。
{
scannerHandle: "123456",
result: SUCCESS,
groups: [
{
title: "Standard",
members: [ "resolution", "mode", "source" ]
}
]
}
如“扫描器配置”中所述,更改一个选项可能会改变另一个选项的限制。因此,setOptionsResponse(setOptions() 的响应对象)包含另一个 options 属性。使用此方法更新界面。然后,根据需要重复上述步骤,直到设置完所有选项。
设置扫描程序选项
通过将 OptionSetting 对象数组传递给 setOptions() 来设置扫描器选项。如需查看示例,请参阅下文中的扫描一页信纸大小的纸张部分。
示例
以 blob 形式检索网页
此示例展示了一种从扫描器中检索页面作为 blob 的方法,并演示了如何使用 OperationResult 的值来使用 startScan() 和 readScanData()。
async function pageAsBlob(handle) {
let response = await chrome.documentScan.startScan(
handle, {format: "image/jpeg"});
if (response.result != chrome.documentScan.OperationResult.SUCCESS) {
return null;
}
const job = response.job;
let imgParts = [];
response = await chrome.documentScan.readScanData(job);
while (response.result == chrome.documentScan.OperationResult.SUCCESS) {
if (response.data && response.data.byteLength > 0) {
imgParts.push(response.data);
} else {
// Delay so hardware can make progress.
await new Promise(r => setTimeout(r, 100));
}
response = await chrome.documentScan.readScanData(job);
}
if (response.result != chrome.documentScan.OperationResult.EOF) {
return null;
}
if (response.data && response.data.byteLength > 0) {
imgParts.push(response.data);
}
return new Blob(imgParts, { type: "image/jpeg" });
}
扫描一页信纸大小的纸张
此示例展示了如何选择扫描器、设置其选项并打开它。然后,它会检索单个网页的内容并关闭扫描器。此流程演示了如何使用 getScannerList()、openScanner()、setOptions() 和 closeScanner()。请注意,网页的内容是通过调用上一个示例中的 pageAsBlob() 函数检索的。
async function scan() {
let response = await chrome.documentScan.getScannerList({ secure: true });
let scanner = await chrome.documentScan.openScanner(
response.scanners[0].scannerId);
const handle = scanner.scannerHandle;
let options = [];
for (source of scanner.options["source"].constraint.list) {
if (source.includes("ADF")) {
options.push({
name: "source",
type: chrome.documentScan.OptionType.STRING,
value: { value: source }
});
break;
}
}
options.push({
name: "tl-x",
type: chrome.documentScan.OptionType.FIXED,
value: 0.0
});
options.push({
name: "br-x",
type: chrome.documentScan.OptionType.FIXED,
value: 215.9 // 8.5" in mm
});
options.push({
name: "tl-y",
type: chrome.documentScan.OptionType.FIXED,
value: 0.0
});
options.push({
name: "br-y",
type: chrome.documentScan.OptionType.FIXED,
value: 279.4 // 11" in mm
});
response = await chrome.documentScan.setOptions(handle, options);
let imgBlob = await pageAsBlob(handle);
if (imgBlob != null) {
// Insert imgBlob into DOM, save to disk, etc
}
await chrome.documentScan.closeScanner(handle);
}
显示配置
如其他位置所述,向用户显示扫描器的配置选项需要调用 getOptionGroups(),此外还需要调用 openScanner() 返回的扫描器选项。这样,选项就可以向制造商定义组中的用户显示。此示例展示了如何执行此操作。
async function showConfig() {
let response = await chrome.documentScan.getScannerList({ secure: true });
let scanner = await chrome.documentScan.openScanner(
response.scanners[0].scannerId);
let groups = await chrome.documentScan.getOptionGroups(scanner.scannerHandle);
for (const group of groups.groups) {
console.log("=== " + group.title + " ===");
for (const member of group.members) {
const option = scanner.options[member];
if (option.isActive) {
console.log(" " + option.name + " = " + option.value);
} else {
console.log(" " + option.name + " is inactive");
}
}
}
}
类型
CancelScanResponse
属性
-
作业
字符串
提供传递给
cancelScan()的相同作业句柄。 -
后端的取消扫描结果。如果结果为
OperationResult.SUCCESS或OperationResult.CANCELLED,则表示扫描已取消,扫描器已准备好开始新的扫描。如果结果为OperationResult.DEVICE_BUSY,则扫描器仍在处理请求的取消操作;调用者应等待一小段时间,然后再次尝试该请求。其他结果值表示不应重试的永久性错误。
CloseScannerResponse
属性
-
关闭扫描器的结果。即使此值不是
SUCCESS,句柄也会无效,不应将其用于任何进一步的操作。 -
scannerHandle
字符串
与传递给
closeScanner的扫描器句柄相同。
Configurability
如何更改选项。
枚举
“NOT_CONFIGURABLE”
相应选项为只读。
“SOFTWARE_CONFIGURABLE”
该选项可在软件中设置。
“HARDWARE_CONFIGURABLE”
用户可以通过切换扫描器上的按钮来设置此选项。
ConnectionType
指示扫描器与计算机的连接方式。
枚举
"UNSPECIFIED"
“USB”
"NETWORK"
枚举
“INT_RANGE”
对一系列 OptionType.INT 值的限制。OptionConstraint 的 min、max 和 quant 属性将为 long,而其 list 属性将处于未设置状态。
“FIXED_RANGE”
对一系列 OptionType.FIXED 值的限制。OptionConstraint 的 min、max 和 quant 属性将为 double,而其 list 属性将处于未设置状态。
“INT_LIST”
对特定 OptionType.INT 值列表的限制。OptionConstraint.list 属性将包含 long 值,而其他属性将处于未设置状态。
“FIXED_LIST”
对特定 OptionType.FIXED 值列表的限制。OptionConstraint.list 属性将包含 double 值,而其他属性将处于未设置状态。
“STRING_LIST”
对特定 OptionType.STRING 值列表的限制。OptionConstraint.list 属性将包含 DOMString 值,而其他属性将处于未设置状态。
DeviceFilter
属性
-
局部
布尔值(可选)
仅返回直接连接到计算机的扫描仪。
-
安全
布尔值(可选)
仅返回使用安全传输方式(例如 USB 或 TLS)的扫描器。
GetOptionGroupsResponse
属性
-
群组
OptionGroup[] 可选
如果
result为SUCCESS,则提供扫描器驱动程序提供的选项组列表(按顺序)。 -
获取选项组的结果。如果此属性的值为
SUCCESS,系统将填充groups属性。 -
scannerHandle
字符串
与传递给
getOptionGroups的扫描器句柄相同。
GetScannerListResponse
属性
-
枚举结果。请注意,即使此值指示存在错误,也可能会返回部分结果。
-
扫描仪
与所提供的
DeviceFilter相匹配的扫描器列表(可能为空)。
OpenScannerResponse
属性
-
选项
对象(可选)
如果
result为SUCCESS,则提供键值映射,其中键是设备专用选项,值是ScannerOption��实例。 -
打开扫描器的结果。如果此属性的值为
SUCCESS,则系统会填充scannerHandle和options属性。 -
scannerHandle
字符串(选填)
如果
result为SUCCESS,则表示扫描器的句柄,可用于进一步操作。 -
scannerId
字符串
传递给
openScanner()的扫描器 ID。
OperationResult
一种枚举,用于指示每项操作的结果。
枚举
“UNKNOWN”
发生了未知或一般性故障。
“SUCCESS”
操作成功。
“不支持”
不支持该操作。
“已取消”
相应操作已取消。
“DEVICE_BUSY”
设备正忙。
“INVALID”
数据或传递给方法的实参无效。
“WRONG_TYPE”
提供的值对于底层选项而言是错误的数据类型。
“EOF”
没有更多数据。
“ADF_JAMMED”
进纸器卡纸。
“ADF_EMPTY”
文件进纸器为空。
“COVER_OPEN”
平板扫描仪盖已打开。
“IO_ERROR”
与设备通信时发生错误。
“ACCESS_DENIED”
设备需要进行身份验证。
“NO_MEMORY”
Chromebook 上的内存不足,无法完成操作。
“UNREACHABLE”
设备无法连接。
“MISSING”
设备已断开连接。
“INTERNAL_ERROR”
在调用应用之外的其他位置发生了错误。
OptionConstraint
属性
-
list
string[] | number[] 可选
-
max
number 可选
-
分钟
number 可选
-
quant
number 可选
OptionGroup
属性
-
成员
字符串[]
驱动程序提供的顺序中的选项名称数组。
-
title
字符串
提供可打印的标题,例如“几何图形选项”。
OptionSetting
属性
-
name
字符串
指明要设置的选项的名称。
-
类型
表示选项的数据类型。所请求的数据类型必须与底层选项的实际数据类型相匹配。
-
值
字符串 | 数值 | 布尔值 | 数值数组 可选
表示要设置的值。如果将此字段留空,系统将自动为已启用
autoSettable的选项设置值。为value提供的数据类型必须与type一致。
OptionType
选项的数据类型。
枚举
“UNKNOWN”
相应选项的数据类型未知。value 属性将被取消设置。
“BOOL”
value 属性将为 truefalse 之一。
“INT”
有符号 32 位整数。value 属性将为 long 或 long[],具体取决于相应选项是否采用多个值。
“FIXED”
范围为 -32768 到 32767.9999 的双精度浮点数,分辨率为 1/65535。value 属性将为 double 或 double[],具体取决于相应选项是否接受多个值。无法精确表示的双精度值将四舍五入到可用范围和精度。
“STRING”
任意字节序列,但不能包含 NUL ('\0')。value 属性将为 DOMString。
“BUTTON”
此类选项没有值。相反,设置此类选项会���扫描器驱动程序中产生特定于选项的副作用。例如,扫描器驱动程序可以使用按钮类型的选项来提供选择默认值的方法,或者指示自动进纸器前进到下一张纸。
“GROUP”
分组选项。没有值。包含此值是为了实现兼容性,但通常不会在 ScannerOption 值中返回此值。使用 getOptionGroups() 可检索包含成员选项的群组列表。
枚举
“UNITLESS”
相应值是一个无单位的数字。例如,它可以是阈值。
“PIXEL”
该值是像素数,例如扫描尺寸。
“位”
该值是位数,例如颜色深度。
“MM”
该值以毫米为单位,例如扫描尺寸。
“DPI”
该值以每英寸的点数(例如分辨率)为单位进行衡量。
“PERCENT”
值是百分比,例如亮度。
“MICROSECOND”
该值以微秒为单位,例如曝光时间。
ReadScanDataResponse
属性
-
数据
ArrayBuffer 可选
如果
result为SUCCESS,则包含扫描的图片数据的下一个块。如果result为EOF,则包含扫描的图片数据的最后一块。 -
estimatedCompletion
number 可选
如果
result为SUCCESS,则表示到目前为止已传送的扫描数据占总扫描数据的百分比估计值,范围为 0 到 100。 -
作业
字符串
提供传递给
readScanData()的作业句柄。 -
读取数据的结果。如果其值为
SUCCESS,则data包含准备好读取的下一个(可能为零长度)图片数据块。如果其值为EOF,则data包含图像数据的最后一个块。
ScannerInfo
属性
-
connectionType
指示扫描器与计算机的连接方式。
-
deviceUuid
字符串
用于与其他指向同一物理设备的
ScannerInfo条目进行匹配。 -
imageFormats
字符串[]
可为返回的扫描结果请求的 MIME 类型数组。
-
制造商
字符串
扫描器制造商。
-
模型
字符串
扫描器型号(如果有)或一般说明。
-
name
字符串
扫描器在界面中显示的直观易懂的名称。
-
protocolType
字符串
用于访问扫描仪的协议或驱动程序的人类可读说明,例如 Mopria、WSD 或 epsonds。如果设备支持多种协议,此属性主要用于允许用户在这些协议之间进行选择。
-
scannerId
字符串
特定扫描器的 ID。
-
安全
布尔值
如果为 true,扫描器连接的传输无法被被动监听器(例如 TLS 或 USB)拦截。
ScannerOption
属性
-
可配置性
指示相应选项是否可以更改以及如何更改。
-
项限制条件
在当前扫描器选项上定义
OptionConstraint。 -
说明
字符串
选项的详细说明。
-
isActive
布尔值
表示相应选项处于有效状态,可以设置或检索。如果为 false,则不会设置
value属性。 -
isAdvanced
布尔值
表示界面不应默认显示此选项。
-
isAutoSettable
布尔值
可由扫描仪驱动程序自动设置。
-
isDetectable
布尔值
表示此选项可从软件中检测到。
-
isEmulated
布尔值
如果为 true,则由扫描器驱动程序进行模拟。
-
name
字符串
使用小写 ASCII 字母、数字和短划线的选项名称。不允许使用变音符号。
-
title
字符串
可打印的单行标题。
-
类型
value属性中包含的数据类型,设置此选项时需要用到该数据类型。 -
单位
相应选项的计量单位。
-
值
字符串 | 数值 | 布尔值 | 数值数组 可选
选项的当前值(如果相关)。请注意,此属性的数据类型必须与
type中指定的数据类型一致。
ScanOptions
属性
-
maxImages
number 可选
允许扫描的图片数量。默认值为 1。
-
mimeTypes
string[] 可选
调用方接受的 MIME 类型。
ScanResults
属性
-
dataUrls
字符串[]
一个数据图片网址数组,其格式可作��“src”值传递给图片标记。
-
mimeType
字符串
dataUrls的 MIME 类型。
SetOptionResult
属性
-
name
字符串
指明所设置选项的名称。
-
指示设置选项的结果。
SetOptionsResponse
属性
-
选项
对象(可选)
一个更新后的键值映射,其中包含从选项名称到
ScannerOption值的映射,这些值包含尝试设置所有提供的选项后的新配置。此属性的结构与OpenScannerResponse中的options属性相同。即使某些选项未成功设置,系统也会设置此属性;但如果检索更新后的配置失败(例如,扫描器在扫描过程中断开连接),系统将取消设置此属性。
-
结果
一个结果数组,每个传入的
OptionSetting对应一个结果。 -
scannerHandle
字符串
提供传递给
setOptions()的扫描器句柄。
StartScanOptions
属性
-
格式
字符串
指定返回扫描数据的 MIME 类型。
-
maxReadSize
number 可选
如果指定了非零值,则将单个
readScanData响应中返回的最大扫描字节数限制为该值。允许的最小值是 32768(32 KB)。如果未指定此属性,则返回的块的大小可能与整个扫描的图片一样大。
StartScanResponse
属性
-
作业
字符串(选填)
如果
result为SUCCESS,则提供可用于读取扫描数据或取消作业的句柄。 -
启动扫描的结果。如果此属性的值为
SUCCESS,系统将填充job属性。 -
scannerHandle
字符串
提供传递给
startScan()的相同扫描器句柄。
方法
cancelScan()
chrome.documentScan.cancelScan(
job: string,
): Promise<CancelScanResponse>
取消已开始的扫描,并返回一个 Promise,该 Promise 会解析为 CancelScanResponse 对象。如果使用回调,则会将对象传递给回调。
参数
-
作业
字符串
之前从对
startScan的调用返回的有效扫描作业的句柄。
返回
-
Promise<CancelScanResponse>
closeScanner()
chrome.documentScan.closeScanner(
scannerHandle: string,
): Promise<CloseScannerResponse>
使用传入的句柄关闭扫描器,并返回一个 Promise,该 Promise 会解析为 CloseScannerResponse 对象。如果使用回调,则会将对象传递给回调。即使响应不成功,所提供的句柄也会失效,不应再用于后续操作。
参数
-
scannerHandle
字符串
指定之前从对
openScanner的调用返回的开放扫描器的句柄。
返回
-
Promise<CloseScannerResponse>
getOptionGroups()
chrome.documentScan.getOptionGroups(
scannerHandle: string,
): Promise<GetOptionGroupsResponse>
从之前通过 openScanner 打开的扫描器获取群组名称和成员选项。此方法会返回一个 Promise,该 Promise 会解析为一个 GetOptionGroupsResponse 对象。如果向此函数传递了回调,则返回的数据会传递给该回调。
参数
-
scannerHandle
字符串
通过调用
openScanner返回的已打开扫描器的句柄。
返回
-
Promise<GetOptionGroupsResponse>
getScannerList()
chrome.documentScan.getScannerList(
filter: DeviceFilter,
): Promise<GetScannerListResponse>
获取可用扫描器的列表,并返回一个 Promise,该 Promise 会解析为 GetScannerListResponse 对象。如果向此函数传递了回调,则返回的数据会传递给该回调。
参数
-
filter
一个
DeviceFilter,用于指示应返回哪些类型的扫描器。
返回
-
Promise<GetScannerListResponse>
openScanner()
chrome.documentScan.openScanner(
scannerId: string,
): Promise<OpenScannerResponse>
打开扫描器以进行独占访问,并返回一个 Promise,该 Promise 会解析为 OpenScannerResponse 对象。如果向此函数传递了回调,则返回的数据会传递给该回调。
参数
-
scannerId
字符串
要打开的扫描器的 ID。此值是从之前对
getScannerList的调用返回的值之一。
返回
-
Promise<OpenScannerResponse>
readScanData()
chrome.documentScan.readScanData(
job: string,
): Promise<ReadScanDataResponse>
从有效作业句柄读取下一块可用的图片数据,并返回一个 Promise,该 Promise 会解析为 ReadScanDataResponse 对象。如果使用回调,则会将对象传递给回调。
**注意:**响应结果为 SUCCESS 且 data 成员的长度为零是有效的。这意味着扫描器仍在工作,但���未准备好其他数据。来电者应稍等片刻,然后重试。
扫描作业完成后,响应将包含结果值 EOF。此响应可能包含一个最终的非零 data 成员。
参数
-
作业
字符串
之前从
startScan返回的有效作业句柄。
返回
-
Promise<ReadScanDataResponse>
scan()
chrome.documentScan.scan(
options: ScanOptions,
): Promise<ScanResults>
执行文档扫描,并返回一个 Promise,该 Promise 会解析为 ScanResults 对象。如果向此函数传递了回调,则返回的数据会传递给该回调。
参数
-
选项
包含扫描参数的对象。
返回
-
Promise<ScanResults>
Chrome 96 及更高版本
setOptions()
chrome.documentScan.setOptions(
scannerHandle: string,
options: OptionSetting[],
): Promise<SetOptionsResponse>
为指定扫描器设置选项,并返回一个 Promise,该 Promise 会解析为一个 SetOptionsResponse 对象,其中包含尝试按传入的 OptionSetting 对象中的顺序设置每个值的结果。如果使用回调,则会将对象传递给回调。
参数
-
scannerHandle
字符串
要设置选项的扫描器的句柄。此值应为之前从对
openScanner的调用返回的值。 -
选项
要应用于扫描器的
OptionSetting对象列表。
返回
-
Promise<SetOptionsResponse>
startScan()
chrome.documentScan.startScan(
scannerHandle: string,
options: StartScanOptions,
): Promise<StartScanResponse>
在指定的扫描器上开始扫描,并返回一个 Promise,该 Promise 会解析为 StartScanResponse。如果使用回调,则会将对象传递给回调。如果调用成功,响应会包含一个作业句柄,可在后续调用中使用该句柄来读取扫描数据或取消扫描。
参数
-
scannerHandle
字符串
打开的扫描器的句柄。此值应为之前从对
openScanner的调用返回的值。 -
一个
StartScanOptions对象,用于指示扫描时要使用的选项。StartScanOptions.format属性必须与扫描器ScannerInfo中返回的某个条目匹配。
返回
-
Promise<StartScanResponse>