如何检查支持的S Pen设备?

问题描述:

如何确定设备是否具有S Pen?如何检查支持的S Pen设备?

请注意,我在Samsung S3上使用SDrawLibrary.isSupportedModel()它返回true,我们都知道S3没有S Pen。

任何gaudiness或帮助将不胜感激。

您正在使用的方法已从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开始工作。我更新了上面的代码。

+0

我希望能找到更好的答案,我脑子里想的这个解决办法,但正如你所说的**它需要保持清单的更新* *我会将您的解决方案标记为答案,直到有人让我更可靠。 – Sammy 2013-02-18 05:07:15

+0

检查更新的帖子。 – tomrozb 2013-02-18 08:26:57

+0

这是否意味着只支持note和samsung设备?运行spen应用程序的其他设备不会起作用吗? – 2014-03-24 06:07:03

您还可以通过输入管理检测S-笔:

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; 
     } 
    }