Моя основная задача заключается в том чтобы, научить Unity читать значения из SharedPreference, я пробовал следовать этой инструкции, но ничего не работает, возможно я что то не понял. Подскажите, что не так?!
Сначала я сделал плагин из этого кода:
package com.yourcompany.productname.activity;
import android.app.Activity;
import android.content.SharedPreferences;
public class lib extends Activity {
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;
}
}
Поместил плагин и манифест в Assets/Plugins/Android/libs, затем создал такой скрипт:
using UnityEngine;
using System.Collections;
public class Plugin : MonoBehaviour {
void Start () {
SetPreferenceString("playerName", "John Doe");
}
void Update () {
TextMesh textMesh = GetComponent<TextMesh> ();
var plugin = new AndroidJavaClass ("com.yourcompany.productname.activity.lib");
textMesh.text = plugin.CallStatic<string> ("getPreferenceString", "playerName");
}
AndroidJavaObject AJO = null;
public void SetPreferenceString (string prefKey, string prefValue) {
if(AJO == null)
AJO = new AndroidJavaObject("com.yourcompany.productname.activity.lib", 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.lib", new object[0]);
if(AJO == null)
return string.Empty;
return AJO.Call<string>("getPreferenceString", new object[] { prefKey } );
}
}
Как я понял должно работать так, вызывается метод SetPreferenceString обращаться к плагину и записывать значение, затем точно так же это значение выводится.
Вызываешь callstatic(а функция у тебя не статическая), замени на call
textMesh.text = plugin.CallStatic<string> ("getPreferenceString", "playerName");
в Unity необходимо использовать встроенный класс PlayerPrefs
. Из его описания:
On Android data is stored (persisted) on the device. The data is saved in SharedPreferences. C#/JavaScript, Android Java and Native code can all access the PlayerPrefs data. The PlayerPrefs data is physically stored in /data/data/pkg-name/shared_prefs/pkg-name.xml.
Код для Unity:
PlayerPrefs.SetString("PlayerName", "Foobar"); // запись
PlayerPrefs.GetString("PlayerName"); // чтение
Код для Java:
SharedPreferences settings = context.getSharedPreferences(BuildConfig.APPLICATION_ID, MODE_PRIVATE);
String playerName = settings.getString("PlayerName", ""); // чтение
// запись
SharedPreferences.Editor editor = settings.edit();
editor.putString("PlayerName", "Foobar");
editor.apply();
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Имеются две таблицы Departments и EmployeesПри выборе строки в Departments происходит переход по employeesID в таблицу Employees
Заранее прошу прощения за банальность вопроса, но мнение опытных людей со стэка для меня очень важно