UnityにはNative Code PluginsというUnity 以外で作成されたコードをUnity プラグインの形で含めることができる機能があります。その機能を使いiOSでバッテリレベルと状態の取得をしてみました。必要なファイルはcsファイルとmmファイルの2つだけでできます。
BatteryScript.cs
BatteryScript.csは適当なGameObjectに[Add Component]してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using UnityEngine; using System.Collections; using System.Runtime.InteropServices; using UnityEngine.UI; public class BatteryScript : MonoBehaviour { [DllImport("__Internal")] private static extern float BatteryLevelNative(); [DllImport("__Internal")] private static extern int BatteryStateNative(); void Start() { float batteryLevel = BatteryLevelNative(); int batteryState = BatteryStateNative (); Debug.Log ("level: " + batteryLevel + " state:" + batteryState); } } |
GetBattery.mm
Objective-Cで書いているので拡張子はmmになります。よくわからないですが、ファイル名は何でも良いようです。
このファイルはAssets/Plugins/iOSにGetBattery.mmを入れるとiOSのプラグインとして読み込んでくれるようになりますが、やはりEditor上ではうまく動かないので一旦Buildして端末上で確認する必要があります。
Objective-Cはあまり詳しくありませんがこのページによるとbatteryLevelは0〜1.0で0.05刻みの取得になるようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
extern "C" { float BatteryLevelNative() { [UIDevice currentDevice].batteryMonitoringEnabled = YES; float batteryLevel = [UIDevice currentDevice].batteryLevel; return batteryLevel; } int BatteryStateNative() { UIDeviceBatteryState batteryState = [UIDevice currentDevice].batteryState; [UIDevice currentDevice].batteryMonitoringEnabled = YES; int state = -1; // バッテリーの充電状態を取得する switch ([UIDevice currentDevice].batteryState) { case UIDeviceBatteryStateFull: // Full state = 2; break; case UIDeviceBatteryStateCharging: // Charging state = 1; break; case UIDeviceBatteryStateUnplugged: // Unplugged state = 0; break; case UIDeviceBatteryStateUnknown: // Unknown state = -1; break; default: break; } return state; } } |
参考
http://docs.unity3d.com/ja/current/Manual/PluginsForIOS.html
http://qiita.com/tyfkda/items/dc5da219d22cc55de301
0 Comments
1 Pingback