Android 如何检查支持的S笔设备?

Android 如何检查支持的S笔设备?,android,Android,如何确定设备是否有笔 请注意,我在三星S3上使用的是SDrawLibrary.isSupportedModel(),当我们都知道S3没有S笔时,它会返回true 非常感谢您的任何华而不实或帮助。您使用的方法已从S Pen SDK中删除。将SDK更新为2.2.5版本,因为有很多改进 目前,该库没有提供任何方法来检查设备是否有笔。使用Build类获取有关设备的信息,准备一个包含带有S笔的型号的列表,然后检查该设备是否在列表中。这可能不是您期望的答案,因为它需要使列表保持最新 private stat

如何确定设备是否有笔

请注意,我在三星S3上使用的是
SDrawLibrary.isSupportedModel()
,当我们都知道S3没有S笔时,它会返回true


非常感谢您的任何华而不实或帮助。

您使用的方法已从S Pen SDK中删除。将SDK更新为2.2.5版本,因为有很多改进

目前,该库没有提供任何方法来检查设备是否有笔。使用
Build
类获取有关设备的信息,准备一个包含带有S笔的型号的列表,然后检查该设备是否在列表中。这可能不是您期望的答案,因为它需要使列表保持最新

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;
}
私有静态最终字符串SAMSUNG=“SAMSUNG”; 私有静态最终字符串NOTE=“GT-N”; 私有静态最终字符串SPEN_FEATURE=“com.sec.FEATURE.SPEN_usp”; 私人最终清单mSPenDevices; 公共布尔值受支持(){ FeatureInfo[]infos=getPackageManager().getSystemAvailableFeatures(); 对于(FeatureInfo:infos){ if(SPEN_FEATURE.equalsIgnoreCase(info.name)){ 返回true; } } if(Build.MODEL.toUpperCase(Locale.ENGLISH.startsWith(NOTE)){ 返回true; } if(三星equalsIgnoreCase(制造厂家)){ 用于(字符串模型:MSPendDevices){ if(model.equalsIgnoreCase(Build.model)){ 返回true; } } } 返回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;
        }
    }
boolean sPen=false;
如果(Build.VERSION.SDK_INT>15){
InputManager InputMgr=(InputManager)getSystemService(INPUT\U服务);
int[]inputs=inptmgr.getInputDeviceId();

对于(int i=0;iI)我希望找到更好的答案,我考虑了这个解决方案,但正如您所说,需要保持列表最新,我会将您的解决方案标记为答案,直到其他人给我一个更可靠的答案。这是否意味着只支持note和三星设备?没有其他运行spen应用程序的设备可以工作?