android - 在 unity 和原生 android sdk 之间使用共享首选项

标签 android unity3d

我正在使用原生 android sdk 开发一个应用程序。不过,我有一位同事正在研究 Unity。

我想创建一个 Activity A 来完成一些工作,然后调用另一个 Activity B。

我的同事正在使用 Unity 创建 Activity B 屏幕。

两个 Activity 都将使用共享首选项(读取和写入)

有什么办法可以做到这一点?

非常感谢

最佳答案

您需要为 Android 编写一个插件才能使其正常工作。虽然官方文档非常适合入门,但这里有一些示例代码,您可以在阅读完它后使用。

我不会详细介绍如何创建插件,因为在 Unity 网站(nexx 提供的链接)上有很好的记录

在下面的示例中,我刚刚编写了几个方法。您可以修改它们以接受和返回其他数据类型,或者更好地使它们通用。

原生 Android 代码

public static final String PREFS_NAME = "MyPrefsFile";

public void setPreferenceString (String prefKey, String prefValue) {
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(prefKey, prefValue);
    editor.commit();

}

public String getPreferenceString (String prefKey) {
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    String playerName = settings.getString(prefKey, "");
    return playerName;
}



现在,在 Unity C# 端,您的插件将具有这样的代码

    AndroidJavaObject AJO = null;

public void SetPreferenceString (string prefKey, string prefValue) {
    if(AJO == null)
        AJO = new AndroidJavaObject("com.yourcompany.productname.activity", new object[0]);

    AJO.Call("setPreferenceString", new object[] { prefKey, prefValue } );
}

public string GetPreferenceString (string prefKey) {
    if(AJO == null)
        AJO = new AndroidJavaObject("com.yourcompany.productname.activity", new object[0]);

    if(AJO == null)
        return string.Empty;
    return AJO.Call<string>("getPreferenceString", new object[] { prefKey } );
}



在 Unity 中的使用

//Setting a player's name to be "John Doe"
void Start () {
    SetPreferenceString("playerName", "John Doe");
}

//Get the stored player's name
string GetPlayerName () {
    return GetPreferenceString("playerName");
}




这绝不是编写插件的最佳方式。但是,它应该能让您清楚地了解如何处理 SharedPrefs。

显然,请确保你们都使用相同的首选项!

关于android - 在 unity 和原生 android sdk 之间使用共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682977/

相关文章:

android - 将 Android 连接到 Python

c# - 如何将 Unity 支持添加到 NuGet 包?

java - 使用 Android 向 API 发送信息

java - Android:尝试在两个动画之间添加等待,在 wait() 错误之前获取对象未被线程锁定

android - Jetpack Compose 抛出异常时如何重新启动 Loop?

android FLAG_SHOW_WHEN_LOCKED 不工作

android - 将android eclipse库添加到unity3d项目

错误类型的 C# 数组可能吗?

c# - 为什么我不能使用 stopwatch.Restart()?

c# - unity c#运行shell脚本