我正在使用 Open Mobile API 进行开发,但到目前为止还没有找到默认支持 API 的设备列表(默认情况下使用 OEM ROM)。
我意识到,从 API 级别 21 开始,Android 电话支持通过基本和逻辑通道直接通过 TelephonyManager 发送 APDU。但我也想知道运行 pre-API level 21 的设备。
那么,是否已经编制了具有内置支持的设备列表,或者有没有办法自己找出来?
我正在使用 Open Mobile API 进行开发,但到目前为止还没有找到默认支持 API 的设备列表(默认情况下使用 OEM ROM)。
我意识到,从 API 级别 21 开始,Android 电话支持通过基本和逻辑通道直接通过 TelephonyManager 发送 APDU。但我也想知道运行 pre-API level 21 的设备。
那么,是否已经编制了具有内置支持的设备列表,或者有没有办法自己找出来?
我不知道有任何完整的清单。但是,在我们的报告Open Mobile API: Accessing the UICC on Android Devices中没有那么全面,在SEEK-for-Android Wiki中还有另一个(尽管现在未维护)。
如果您可以访问您感兴趣的每个设备,您当然可以检查智能卡系统服务是否可用:
final String SMARTCARD_SERVICE_PACKAGE = "org.simalliance.openmobileapi.service";
try {
PackageInfo pi = getPackageManager().getPackageInfo(SMARTCARD_SERVICE_PACKAGE, 0);
// smartcard service present
} catch (PackageManager.NameNotFoundException ex) {
// smartcard service NOT present
}
或者,您可以通过将以下 uses-library 条目添加到其 AndroidManifest.xml 来简单地创建一个声明需要 Open Mobile API 库的应用程序:
<uses-library android:name="org.simalliance.openmobileapi" android:required="true" />
如果该应用程序可以安装在设备上,则表明该设备包含 Open Mobile API 库。
这也可能是获取更全面的受支持设备列表的一种方式:您可以创建这样的应用程序并将其发布到 Google Play。Google Play 将根据<uses-library />
将 required 属性设置为true
( android:required="true"
) 的条目进行过滤;另请参阅Google Play 上的过滤<uses-library>
器。这意味着,一旦您将此类应用程序上传到 Google Play,您应该能够获得支持的设备列表,该列表基本上与所有具有可用 Open Mobile API 库的设备匹配。
虽然@Michael Roland 的回应仍然有效,但值得注意的是,自从Android 9 Pie 以来,Open Mobile API 是 Android 的一部分。
因此对于 API 级别 28 及更高级别,每部手机默认都有 OMAPI,无需显式检查。