ちょっと必要になったので Unity 上から Android の Java を呼び出すコードを調べてみた。
基本的には下記 Unity のドキュメントのように AndroidJavaObject や AndroidJavaClass を利用すると良いらしい。ただ速度的には良くないらしいので設定をちょっと取得するとかそういった用途になるんだろうか。
Unity - Unity Manual Androidのプラグインをビルドする / Building Plugins for Android
ドキュメントにあった Android 端末の設定言語を取得するスクリプトを試してみた。
Java で書けば以下のようなコード(と思うんだけど試してない)。
public string GetLanguage() {
Locale locale = Locale.getDefault();
return locale.getDisplayLanguage();
}
これを Unity C# で AndroidJavaClass などを利用して書こうとすると以下のような感じに。
public string GetLanguage ()
{
using (AndroidJavaClass cls = new AndroidJavaClass ("java.util.Locale")) {
using (AndroidJavaObject locale = cls.CallStatic<AndroidJavaObject> ("getDefault")) {
return locale.Call<string> ("getDisplayLanguage");
}
}
return "";
}
getDefault メソッドは static なので CallStatic としている。そうでないメソッドならその次にある Call で呼べる。
わりと面倒くさいのでもっと複雑な事を行うなら jar ファイル作って呼んだほうが楽だと思う。
-----
おまけ
Android で Mac アドレスを取得する。iOS では取得不可です。Android でも ACCESS_WIFI_STATE のパーミッションを取得する必要があります。まーこういう事もできますよという事で。
Android and Iphone MacAddress | Unity Community
AndroidJavaObject mWiFiManager;
string GetMacAddress ()
{
string macAddr = "";
if (mWiFiManager == null) {
using (AndroidJavaObject activity = new AndroidJavaClass ("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject> ("currentActivity")) {
mWiFiManager = activity.Call<AndroidJavaObject> ("getSystemService", "wifi");
}
}
macAddr = mWiFiManager.Call<AndroidJavaObject> ("getConnectionInfo").Call<string> ("getMacAddress");
return macAddr;
}
コメント