如何确定设备是否有 S Pen?
请注意,我SDrawLibrary.isSupportedModel()
在三星 S3 上使用它返回 true,我们都知道 S3 没有 S Pen。
任何华而不实或帮助将不胜感激。
如何确定设备是否有 S Pen?
请注意,我SDrawLibrary.isSupportedModel()
在三星 S3 上使用它返回 true,我们都知道 S3 没有 S Pen。
任何华而不实或帮助将不胜感激。
您使用的方法已从 S Pen SDK 中删除。更新 SDK 到 2.2.5 版本,因为有很多改进。
目前该库不提供任何方法来检查设备是否有 S Pen。使用Build
该类获取有关设备的信息,准备一个包含具有 S Pen 的型号的列表,然后检查该设备是否在列表中。这可能不是您期望的答案,因为它需要使列表保持最新。
private static final String SAMSUNG = "SAMSUNG";
private static final String NOTE = "GT-N";
private static final String SPEN_FEATURE = "com.sec.feature.spen_usp";
private final List<String> mSPenDevices;
public boolean isSPenSupported() {
FeatureInfo[] infos = getPackageManager().getSystemAvailableFeatures();
for (FeatureInfo info : infos) {
if (SPEN_FEATURE.equalsIgnoreCase(info.name)) {
return true;
}
}
if (Build.MODEL.toUpperCase(Locale.ENGLISH).startsWith(NOTE)) {
return true;
}
if (SAMSUNG.equalsIgnoreCase(Build.MANUFACTURER)) {
for (String model : mSPenDevices) {
if (model.equalsIgnoreCase(Build.MODEL)) {
return true;
}
}
}
return false;
}
编辑:因为 Galaxy Note 系列的大多数型号都以“GT-N”开头,所以我在代码中添加了检查。我知道美国的设备有其他命名,所以这仍然不是最好的解决方案。
另一种可能的方法是检查设备是否具有com.sec.feature.spen_usp
功能,但据我所知,它从 JB 开始工作。我更新了上面的代码。
您还可以通过 InputManager 检测 S-Pen:
boolean sPen = false;
if(Build.VERSION.SDK_INT > 15) {
InputManager inptmgr = (InputManager)getSystemService(INPUT_SERVICE);
int[] inputs = inptmgr.getInputDeviceIds();
for(int i = 0;i<inputs.length;i++) {
if(inptmgr.getInputDevice(inputs[i]).getName().toLowerCase().contains("pen")) sPen = true;
}
}