2

デバイスに S ペンがあるかどうかを確認するにはどうすればよいですか?

私がSamsung S3で使用していることに注意してくださいSDrawLibrary.isSupportedModel()。S3にSペンがないことがわかっている場合はtrueを返します。

派手さや助けをいただければ幸いです。

4

2 に答える 2

2

使用しているメソッドは S Pen SDK から削除されました。多くの改善があったため、SDK を 2.2.5 バージョンに更新します。

現時点では、ライブラリはデバイスに S ペンがあるかどうかを確認する方法を提供していません。このクラスを使用し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;
}

EDIT: Galaxy Noteシリーズのほとんどのモデルが「GT-N」で始まるので、コードにチェックを入れました。米国のデバイスには他の名前が付いていることを認識しているため、これはまだ最善の解決策ではありません.

別の可能なアプローチは、デバイスにcom.sec.feature.spen_usp機能があるかどうかを確認することですが、私が知る限り、JB から動作します。上記のコードを更新しました。

于 2013-02-17T15:10:43.010 に答える
2

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;
        }
    }
于 2015-04-08T00:18:53.260 に答える