C# 如何在C中使用Unity访问android系统设置#

C# 如何在C中使用Unity访问android系统设置#,c#,android,unity3d,settings,system,C#,Android,Unity3d,Settings,System,我正在制作一个应用程序,需要能够检查android手机上是否激活了蓝牙/手机旋转/手电筒/飞机模式/GPS/手机亮度/静音模式等设置 我还没有找到在Unity中使用C#的方法。我找到了使用Xamarin的方法,但没有一种方法能与Unity一起工作(或者我没有做对),我找到的唯一方法是使用Java并将其制作成插件,然后在C#脚本中调用它。但我找不到一个明确的方法来实现这一点。如果这是唯一的解决方案,请您解释一下如何做到这一点,我找到的所有文档都来自2014年的旧版本 我认为有一个简单的解决办法,但

我正在制作一个应用程序,需要能够检查android手机上是否激活了蓝牙/手机旋转/手电筒/飞机模式/GPS/手机亮度/静音模式等设置

我还没有找到在Unity中使用C#的方法。我找到了使用Xamarin的方法,但没有一种方法能与Unity一起工作(或者我没有做对),我找到的唯一方法是使用Java并将其制作成插件,然后在C#脚本中调用它。但我找不到一个明确的方法来实现这一点。如果这是唯一的解决方案,请您解释一下如何做到这一点,我找到的所有文档都来自2014年的旧版本


我认为有一个简单的解决办法,但我就是找不到。清单部分不是问题,我将添加所需的权限。

Java中,您要调用的方法应该是公共的或静态的,您必须将Java源代码构建为库(在build.gradle:
应用插件:“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);
//此类字符串是Java类顶部用类名扩展的包,例如:
//package com.yourcompany.you.package;
string classString=“com.yourcompany.you.package.className”;
//上课
var tempAjc=新的AndroidJavaClass(classString);
//在这里,如果希望在创建时传递一些参数,可以对返回类实例的类调用静态方法
_androidObject=tempAjc.CallStatic(“CreateInstance”,
新对象[]{arg1,arg2});
//对新实例的非静态调用
_调用(“PassingMoreStuff”,initParam);
//如果要将Java中的内容返回给Unity:
int javaVal=_androidObject.Call(方法名,参数);

太好了,请随时将此标记为答案。