DeviceQuery
DeviceQuery.js は https://github.com/uupaa/DeviceQuery.js で公開されている JavaScript ライブラリです。
Device.js に登録されている iPhone, Android, WindowsPhone のデバイス情報を検索します。
Browser, WebWorkers, Node.js 環境で動作し、Closure Compiler で Minify した状態でも動作します。
npm install uupaa.devicequery.js
コマンドでインストールします。
ブラウザからは、<script src="./lib/DeviceQuery.js"></script>
で、
node.js からは require("uupaa.devicequery.js")
で利用できます。
DeviceQuery.js を組み込むと、global.DeviceQuery()
が利用可能になります。
DeviceQuery(selector:DeviceQueryString, caseSensitive:Boolean = false):IDArray は、
selector に指定された検索式で DEVICE_CATALOG と SOC_CATALOG から絞込検索を行い、見つかった ID を配列で返します。
selector は、 KEYWORD 条件式 VALUE;...
のように指定します。セミコロン(;) で式を連結することで、さらに絞り込めます。
指定可能な KEYWORD と 条件式(OPERATOR), VALUE の組み合わせは以下の表を参考にしてください。
caseSensitive に true を指定すると大小文字を区別して検索します。
KEYWORD | 例 |
---|---|
DEVICE.BRAND | DeviceQuery("DEVICE.BRAND = Google; GPU.TYPE = POWERVR") |
DEVICE.SOC | DeviceQuery("DEVICE.SOC = MSM8960") |
OS.TYPE | DeviceQuery("OS.TYPE = Android") |
OS.VERSION.PRE | DeviceQuery("OS.TYPE = Android; OS.VERSION.PRE >= 2.3") |
OS.VERSION.HIGHEST | DeviceQuery("OS.TYPE = Android; OS.VERSION.PRE >= 2.3; OS.VERSION.HIGHEST < 4.4") |
CPU.TYPE | DeviceQuery("CPU.TYPE = ARM"); // ARM SoC |
CPU.CLOCK | DeviceQuery("CPU.CLOCK > 1.0"); // CPUクロックが1.0GHz以上のSoC |
CPU.CORES | DeviceQuery("CPU.CORES >= 2"); // CPUコア数が2以上のSoC |
GPU.TYPE | DeviceQuery("GPU.TYPE = POWERVR; DEVICE.BRAND = Google"); // GPUがPowerVRでGoogleブランドの端末 |
GPU.ID | DeviceQuery("GPU.TYPE = Adreno ; GPU.ID = 320") |
INPUT.TOUCHES | DeviceQuery("INPUT.TOUCHES = 1") |
MEMORY.RAM | DeviceQuery("MEMORY.RAM >= 1.5") |
DISPLAY.SHORT | DeviceQuery("DISPLAY.SHORT < 480") |
DISPLAY.LONG | DeviceQuery("DISPLAY.LONG >= 1200") |
DISPLAY.PPI | DeviceQuery("DISPLAY.PPI >= 200") |
DISPLAY.DPR | DeviceQuery("DISPLAY.DPR >= 2") |
OPERATOR | 例 |
---|---|
= または ==
|
DeviceQuery("OS.TYPE = Android") |
<= |
DeviceQuery("OS.VERSION.PRE <= 4.2") |
>= |
DeviceQuery("DISPLAY.LONG >= 1200") |
< |
DeviceQuery("DISPLAY.LONG < 1200") |
> |
DeviceQuery("DISPLAY.LONG > 1200") |
Device.js の DEVICE_CATALOG や SOC_CATALOG の値が 0 または "" の項目は検索にヒットしません。
function DeviceQuery(selector, // @arg DeviceQueryString: query string. "GPU.TYPE=Adreno;GPU.ID=330"
caseSensitive) { // @arg Boolean(= false): true is case-sensitive, false is ignore case.
// @ret IDArray: [id, ...]
// @help: DeviceQuery
// @desc: Query device catlog.
return _filter( _processing( _parse(selector) ), caseSensitive || false );
}
DeviceQuery("DEVICE.SOC = MSM8960");
// ["SH-03F", "L-02E", "N-02E", "N-05E", "SH-01E", "SH-01EVW", "SH-05E", "SO-01E", "F-03E", "HW-01E", "L-05D", "N-07D", "N-08D", "SC-06D", "SH-09D", "SH-10D", "SO-04D", "SO-05D", "P-07D", "T-02D", "KYY21", "SHT21", "SCL21", "CAL21", "SHL21", "KYL21", "FJL21", "SOL21", "PTL21", "101F", "201HW", "SBM200SH", "201K", "DM014SH", "201M", "SBM205SH", "202K", "WX10K", "DM015K", "8X", "Lumia 620", "Lumia 820", "Lumia 822", "Lumia 920", "Lumia 925", "Lumia 928", "Lumia 1020", "GT-I8750", "SGH-T899M", "SCH-I930"]
// iOS デバイスの情報をダンプする
DeviceQuery("OS.TYPE = iOS").forEach(function(id) {
console.log( JSON.stringify( Device.toSpecObject(id) ) );
});
// {"DEVICE":{"ID":"iPod touch 3","MAYBE":false,"BRAND":"Apple","SOC":"S5PC100","GPS":false},"OS":{"TYPE":"","VERSION":{"CURRENT":{"MAJOR":0,"MINOR":0,"PATCH":0},"PRE":{"MAJOR":3,"MINOR":1,"PATCH":0},"HIGHEST":{"MAJOR":5,"MINOR":1,"PATCH":1}}},"CPU":{"TYPE":"ARM","CLOCK":0.6,"CORES":1,"SIMD":true},"GPU":{"TYPE":"PowerVR","ID":"SGX535"},"INPUT":{"TOUCH":true,"TOUCHES":5},"MEMORY":{"RAM":0.125},"DISPLAY":{"PPI":326,"DPR":2,"LONG":960,"SHORT":640},"NETWORK":{"3G":false,"LTE":false,"NFC":false,"WIFI":true},"BROWSER":{"USER_AGENT":""}}
// {"DEVICE":{"ID":"iPod touch 4","MAYBE":false,"BRAND":"Apple","SOC":"A4","GPS":false},"OS":{"TYPE":"","VERSION":{"CURRENT":{"MAJOR":0,"MINOR":0,"PATCH":0},"PRE":{"MAJOR":4,"MINOR":1,"PATCH":0},"HIGHEST":{"MAJOR":6,"MINOR":1,"PATCH":5}}},"CPU":{"TYPE":"ARM","CLOCK":0.8,"CORES":1,"SIMD":true},"GPU":{"TYPE":"PowerVR","ID":"SGX535"},"INPUT":{"TOUCH":true,"TOUCHES":5},"MEMORY":{"RAM":0.25},"DISPLAY":{"PPI":326,"DPR":2,"LONG":960,"SHORT":640},"NETWORK":{"3G":false,"LTE":false,"NFC":false,"WIFI":true},"BROWSER":{"USER_AGENT":""}}
// Google(Nexus) ブランドの端末名の一覧をダンプする
DeviceQuery("DEVICE.BRAND = Google");
// ["Nexus One", "Nexus S", "Galaxy Nexus", "Nexus 4", "Nexus 5", "Nexus 7", "Nexus 7 (2013)", "Nexus 10", "EM01L"]
最後の検索式が CPU.***
または GPU.***
なら SoC ID の配列を返し、それ以外の場合は Device ID の配列を返します。
つまり、
GPU.TYPE ; DEVICE.BRAND
順に検索した場合と、
DEVICE.BRAND ; GPU.TYPE
順に検索した場合では検索結果が異なります。
Query | Result |
---|---|
DeviceQuery("GPU.TYPE = POWERVR; DEVICE.BRAND = Google") |
["Nexus S", "Galaxy Nexus"] Device ID の配列 |
DeviceQuery("DEVICE.BRAND = Google; GPU.TYPE = POWERVR") |
["OMAP4460", "S5PC110"] SoC ID の配列 |