如何在 C# 中使用 Unity 访问 android 系统设置
How to access android system settings with Unity in C#
我正在制作一个应用程序,需要能够检查以下设置是否已激活 Bluetooth/Phone Rotation/Flashlight/Plane Mode/GPS/Phone Brightness/Silent 模式21=] phone.
我还没有找到在 Unity 中使用 C# 执行此操作的任何方法。我找到了使用 Xamarin 来完成它的方法,但是 none 可以与 Unity 一起使用(或者我可能没有做对),我找到的唯一方法是使用 Java 并将其制作成插件和在 C# 脚本中调用它。但我找不到一个明确的方法来完成这项工作。如果这是唯一的解决方案,您能否解释一下如何操作,我找到的所有文档都来自 2014 年的旧版本。
我认为对此有一个简单的解决方案,但我就是找不到。而且清单部分没有问题,我会添加所需的权限。
在 Java 中,您要调用的方法应该是 public 或静态的,您必须将 java 源构建为库(在 build.gradle: apply plugin: 'com.android.library'
中),并将 .aar 添加到 Unity 的 Assets/Plugins/Android/
文件夹中。
然后您可以在 Unity 中实例化您的插件,如下所示:
// this class string is the package at the top of your Java class extended with the class name, e.g.:
// package com.yourcompany.you.package;
string classString = "com.yourcompany.you.package.className";
// Get the class
var tempAjc = new AndroidJavaClass(classString);
// Here you can call a static method on the class that returns an instance of the class if you want to pass some parameters upon creation
_androidObject = tempAjc.CallStatic<AndroidJavaObject>("CreateInstance",
new object[] {arg1, arg2});
// non static call on your new instance
_androidObject.Call("PassingMoreStuff", initParam);
// if you want to return something from Java to Unity:
int javaVal = _androidObject.Call<int>(methodName, parameters);
我正在制作一个应用程序,需要能够检查以下设置是否已激活 Bluetooth/Phone Rotation/Flashlight/Plane Mode/GPS/Phone Brightness/Silent 模式21=] phone.
我还没有找到在 Unity 中使用 C# 执行此操作的任何方法。我找到了使用 Xamarin 来完成它的方法,但是 none 可以与 Unity 一起使用(或者我可能没有做对),我找到的唯一方法是使用 Java 并将其制作成插件和在 C# 脚本中调用它。但我找不到一个明确的方法来完成这项工作。如果这是唯一的解决方案,您能否解释一下如何操作,我找到的所有文档都来自 2014 年的旧版本。
我认为对此有一个简单的解决方案,但我就是找不到。而且清单部分没有问题,我会添加所需的权限。
在 Java 中,您要调用的方法应该是 public 或静态的,您必须将 java 源构建为库(在 build.gradle: apply plugin: 'com.android.library'
中),并将 .aar 添加到 Unity 的 Assets/Plugins/Android/
文件夹中。
然后您可以在 Unity 中实例化您的插件,如下所示:
// this class string is the package at the top of your Java class extended with the class name, e.g.:
// package com.yourcompany.you.package;
string classString = "com.yourcompany.you.package.className";
// Get the class
var tempAjc = new AndroidJavaClass(classString);
// Here you can call a static method on the class that returns an instance of the class if you want to pass some parameters upon creation
_androidObject = tempAjc.CallStatic<AndroidJavaObject>("CreateInstance",
new object[] {arg1, arg2});
// non static call on your new instance
_androidObject.Call("PassingMoreStuff", initParam);
// if you want to return something from Java to Unity:
int javaVal = _androidObject.Call<int>(methodName, parameters);