如何在 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);