Magic Leap2 コントローラのバッテリ情報を取得する方法 Unity編
Magic Leap2 の コントローラのバッテリ情報の確認やアプリケーション上で取得する方法について説明します。
コントローラの外観でバッテリ残量を確認する方法
Magic Leap 1 の Controlはタッチパッドの周りに光るLEDでバッテリの残量が確認できましたが、Magic Leap2 ではタッチパッドの周りがLEDで点灯しません。その為、外観からバッテリの残量を確認することはできません。
Magic Leap OS でバッテリ残量を確認する方法
Magic Leap2 を起動すると上の画像にあるUIが表示されます。左のサイドバーにコントローラのアイコンが表示され、バッテリ残量が表示されます。
アプリケーション上でバッテリ情報を取得する方法
Android の Sticky Intent を使用してバッテリ情報を取得します。
Magic Leap2 の コントローラのバッテリインテントは以下になります。
com.magicleap.controller.action.BATTERY_CHANGED
以下のEXTRAを使用してバッテリの情報を取得することができます。
コントローラがコンピュートパックと接続している場合
BatteryManager.EXTRA_PRESENT : true
BatteryManager.EXTRA_LEVEL : コントローラのバッテリー残量 (0%~100%)
BatteryManager.EXTRA_SCALE : 100
BatteryManager.EXTRA_BATTERY_LOW : 現在のレベルが25%以下の場合true、それ以外の場合にfalseを返します。
BatteryManager.EXTRA_STATUS : コントローラの充電状態に応じて、BatteryManager.BATTERY_STATUS_CHARGING または BatteryManager.BATTERY_STATUS_NOT_CHARGING を返します。
コントローラがコンピュートパックと接続していない場合
BatteryManager.EXTRA_PRESENT : false
BatteryManager.EXTRA_STATUS: BatteryManager.BATTERY_STATUS_UNKNOWN
サンプルコード
public static int GetControllerBatteryState()
{
#if PLATFORM_ANDROID && !UNITY_EDITOR
using var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
if (activity == null)
{
Utils.LogError("Activity is null");
return -1;
}
using var filter = new AndroidJavaObject("android.content.IntentFilter");
if (filter == null)
{
Utils.LogError("IntentFilter is null");
return -1;
}
filter.Call("addAction", "com.magicleap.controller.action.BATTERY_CHANGED");
using var intent = activity.Call<AndroidJavaObject>("registerReceiver", null, filter);
if (intent == null)
{
Utils.LogError("Intent is null");
return -1;
}
using var batteryManager = new AndroidJavaClass("android.os.BatteryManager");
if (batteryManager == null)
{
Utils.LogError("BatteryManager is null");
return -1;
}
var EXTRA_PRESENT = batteryManager.GetStatic<string>("EXTRA_PRESENT");
var EXTRA_LEVEL = batteryManager.GetStatic<string>("EXTRA_LEVEL");
var isPresent = intent.Call<bool>("getBooleanExtra", EXTRA_PRESENT, false);
return isPresent ? intent.Call<int>("getIntExtra", EXTRA_LEVEL, -1) : -1;
#else
return -1;
#endif
}
(2022年9月9日現在、上記コードを使った動作確認は実施しておりません。)
参考情報
How to check the remaining battery level of your controller
https://forum.magicleap.cloud/t/how-to-check-the-remaining-battery-level-of-your-controller/764/8
Magic Leap2 関連記事
ハッシュタグ #LEAPRSJAPAN で Magic Leap2 関連の情報をツイートしてます。
OnePlanet XR
OnePlanet XR はAR/MR技術に専門特化したコンサルティングサービスです。豊富な実績を元に、AR/MR技術を活用した新たな事業の立ち上げ支援や、社内業務のデジタル化/DX推進など、貴社の必要とするイノベーションを実現いたします。
ご相談から受け付けております。ご興味ございましたら弊社までお問い合わせください。(以下にアクセスするとお問い合わせページに遷移されます。)
OnePlanet Tech Magazine
Magic Leap 1、Magic Leap2 、スマホAR(Niantic Lightship ARDKやWebAR)といったAR技術全般をブログマガジンを連載しています。