Как заставить плагин Android читать файл json из внутреннего хранилища из Unity? - PullRequest
0 голосов
/ 30 мая 2020

Мне удалось добавить желаемый json файл во внутреннюю память моего приложения data/<packagename>/files/. Я хочу добиться, чтобы в моем плагине android (внутри приложения Unity) была функция, которая могла бы читать те же json из внутренней памяти. Я сомневаюсь, что это возможно даже во время выполнения. Я пробовал это в своем классе String file_name=context.getFilesDir() + "/"+"stickers.json"; Contentprovider плагина, но мое приложение вылетает на устройстве.

Вторая альтернатива, которая, как я думал, заключается в передаче всего объекта json плагину Android с помощью UnitySendMessage (я никогда не использовал его раньше).

Я хочу, чтобы плагин читал внутренне сохраненное json, потому что я могу динамически изменять json во время выполнения из единицы и выполнять желаемые функции из кода android плагина.

ОБНОВЛЕНИЕ

--------- beginning of crash 2020-05-30 14:09:32.275 22270-22270/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.Addy.Trace, PID: 22270 java.lang.RuntimeException: Unable to get provider com.plugin.unityapp.StickerContentProvider: java.lang.RuntimeException: contents.json file has some issues: /data/user/0/com.Addy.Trace/files/stickers.json: open failed: ENOENT (No such file or directory) at android.app.ActivityThread.installProvider(ActivityThread.java:7416) at android.app.ActivityThread.installContentProviders(ActivityThread.java:6956) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6844) at android.app.ActivityThread.access$1300(ActivityThread.java:268) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1982) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7814) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068) Caused by: java.lang.RuntimeException: contents.json file has some issues: /data/user/0/com.Addy.Trace/files/stickers.json: open failed: ENOENT (No such file or directory) at com.plugin.unityapp.StickerContentProvider.readContentFile(StickerContentProvider.java:164) at com.plugin.unityapp.StickerContentProvider.getStickerPackList(StickerContentProvider.java:182) at com.plugin.unityapp.StickerContentProvider.onCreate(StickerContentProvider.java:98) at android.content.ContentProvider.attachInfo(ContentProvider.java:2113) at android.content.ContentProvider.attachInfo(ContentProvider.java:2087) at android.app.ActivityThread.installProvider(ActivityThread.java:7411) at android.app.ActivityThread.installContentProviders(ActivityThread.java:6956) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6844) at android.app.ActivityThread.access$1300(ActivityThread.java:268) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1982) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7814) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068) Caused by: java.io.FileNotFoundException: /data/user/0/com.Addy.Trace/files/stickers.json: open failed: ENOENT (No such file or directory) at libcore.io.IoBridge.open(IoBridge.java:496) at java.io.FileInputStream.<init>(FileInputStream.java:159) at com.plugin.unityapp.StickerContentProvider.readContentFile(StickerContentProvider.java:156) at com.plugin.unityapp.StickerContentProvider.getStickerPackList(StickerContentProvider.java:182) at com.plugin.unityapp.StickerContentProvider.onCreate(StickerContentProvider.java:98) at android.content.ContentProvider.attachInfo(ContentProvider.java:2113) at android.content.ContentProvider.attachInfo(ContentProvider.java:2087) at android.app.ActivityThread.installProvider(ActivityThread.java:7411) at android.app.ActivityThread.installContentProviders(ActivityThread.java:6956) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6844) at android.app.ActivityThread.access$1300(ActivityThread.java:268) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1982) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7814) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068) Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) at libcore.io.Linux.open(Native Method) at libcore.io.ForwardingOs.open(ForwardingOs.java:167) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252) at libcore.io.ForwardingOs.open(ForwardingOs.java:167) at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7691) at libcore.io.IoBridge.open(IoBridge.java:482) at java.io.FileInputStream.<init>(FileInputStream.java:159) at com.plugin.unityapp.StickerContentProvider.readContentFile(StickerContentProvider.java:156) at com.plugin.unityapp.StickerContentProvider.getStickerPackList(StickerContentProvider.java:182) at com.plugin.unityapp.StickerContentProvider.onCreate(StickerContentProvider.java:98) at android.content.ContentProvider.attachInfo(ContentProvider.java:2113) at android.content.ContentProvider.attachInfo(ContentProvider.java:2087) at android.app.ActivityThread.installProvider(ActivityThread.java:7411) at android.app.ActivityThread.installContentProviders(ActivityThread.java:6956) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6844) at android.app.ActivityThread.access$1300(ActivityThread.java:268) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1982) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7814) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)

Это кра sh вход в LOGCAT студии android. Из единства в скрипте я использую функцию пробуждения и записываю файл json во внутреннее хранилище, но, возможно, во время запуска приложения плагин не обнаруживает json во внутреннем хранилище, используя String file_name=context.getFilesDir() + "/"+"stickers.json";

JSON Содержимое файла

{
  "android_play_store_link": "",
  "ios_app_store_link": "",
  "sticker_packs": [
    {
      "identifier": "1",
      "name": "Adi",
      "publisher": "Jane Doe",
      "tray_image_file": "Trayicon_Cat1.png",
      "image_data_version":"1",
      "avoid_cache":false,
      "publisher_email":"",
      "publisher_website": "",
      "privacy_policy_website": "",
      "license_agreement_website": "",
      "stickers": [
        {
          "image_file": "Formidable.webp",
          "emojis": ["☕","?"]
        },
        {
          "image_file": "Awful.webp",
          "emojis": ["?","?"]
        },
        {
          "image_file": "Athletic.webp",
          "emojis": ["☕","?"]
        }

      ]
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...