
Magic Leap2 コントローラのバッテリ情報を取得する方法 Unity編
Magic Leap2 の コントローラのバッテリ情報の確認やアプリケーション上で取得する方法について説明します。
コントローラの外観でバッテリ残量を確認する方法

Magic Leap 1 の Controlはタッチパッドの周りに光るLEDでバッテリの残量が確認できましたが、Magic Leap2 ではタッチパッドの周りがLEDで点灯しません。その為、外観からバッテリの残量を確認することはできません。
Magic Leap OS でバッテリ残量を確認する方法

Magic Leap2 を起動すると上の画像にあるUIが表示されます。左のサイドバーにコントローラのアイコンが表示され、バッテリ残量が表示されます。
総務省 技適未取得機器を用いた実験等の特例制度
開設届出届出番号:01-20220903-07-028476
開設届出日:2022年09月03日
廃止の期限:2023年03月01日
実験場所:屋内(自宅)
Magic Leap2 (M90AA004_RA)
コンピュートパックとヘッドセット(M1004000)
FCC ID:2AM5N-ML2M1 IC:23045-ML2M1
コントローラ(M2004000)
FCC ID:2AM5N-ML2M2 IC:23045-ML2M2
この Magic Leap2 コンピュートパックとヘッドセットと コントローラは、以下の条件に違反して無線設備を使用した場合、法に定める罰則その他の措置の対象となります。
・電波法に定める技術基準への適合が確認されておらず、法に定める特別な条件の下でのみ使用が認められなかった場合
・届出とは異なる実験期間や実験場所で使用した場合
・届出受理の前に無線設備を使用した場合
・既に届出済みの届出に対し無線設備の台数を追加して増やした場合(実験等の目的が同じ場合)
アプリケーション上でバッテリ情報を取得する方法
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技術全般をブログマガジンを連載しています。