使用unity和native android sdk之间的共享首选项

时间:2014-12-29 03:17:15

标签: android unity3d

我正在使用原生android sdk开发的应用程序。但是,我有一位正在为Unity工作的同事。

我想创建一个活动A来做一些工作,然后再调用另一个活动B.

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

这两项活动都将使用共享偏好(阅读和写作)

有没有办法可以实现这一目标?

非常感谢

1 个答案:

答案 0 :(得分:5)

您需要为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。

显然,请确保你们两个人都使用相同的偏好!