Почему GetExternalFileDirs не работает в android? - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю над примером проекта в единстве android, где приложение считывает текстовый файл в перьевом устройстве OTG, подключенном к телефону android, проблема в том, что мой код работает нормально на некоторых устройствах, но он не работает в некоторые устройства. Я не могу выяснить основную причину даже через крайность logcat, так как она вообще не выдает никакой ошибки, которая указывает на ошибку кода.

Я попытался добавить текстовые журналы, чтобы напечатать текст между кодами, чтобы увидеть, какие тексты не напечатаны, что еще скажет мне, что после этого код строки перестал работать, но все тексты были напечатаны.

Это мой код, который обнаруживает USB и возвращает true, если на USB присутствует текстовый файл:

public void LocateFile()
{

    textfileData = null;

            using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
               using (AndroidJavaObject context = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
               {
     // Get all available external file directories (emulated and USBdrives)
                 AndroidJavaObject[] externalFilesDirectories =  context.Call<AndroidJavaObject[]>("getExternalFilesDirs", (object)null);

                 AndroidJavaObject emulated = null;
                 AndroidJavaObject USBdrive = null;


                  for (int i = 0; i < externalFilesDirectories.Length; i++)
                      {
                         AndroidJavaObject directory = externalFilesDirectories[i];

                        using (AndroidJavaClass environment = new AndroidJavaClass("android.os.Environment"))
                        {         
                          bool isRemovable = environment.CallStatic<bool>("isExternalStorageRemovable", directory);
                          bool isEmulated = environment.CallStatic<bool>("isExternalStorageEmulated", directory);
                          if (isEmulated)
                          {
                            emulated = directory;
                          }
                          else if (isRemovable && isEmulated == false)
                          {
                            USBdrive = directory;
                          }
                        }
                      }

            // Return the USBdrive if available
            if (USBdrive != null)
            { 
             if (File.Exists(USBdrive.Call<string>("getAbsolutePath") + "/serial.txt"))
                {
                  textfileData = File.ReadAllText(USBdrive.Call<string>("getAbsolutePath") + "/serial.txt");

                }

             }    
  }
 }}

Этот код работает на моем телефоне android и возвращает true после обнаружения файл присутствует в pendrive.

Может кто-нибудь сказать мне, в чем может быть проблема, и указать мне правильное направление, я буду очень признателен за вашу поддержку в этом.

Эта функция locateFile () вызывается при обновлении ().

Обновление: я попытался отладить количество хранилищ, найденных на мобильном устройстве, и код не читает USB. Он отлично читает внутреннюю и SD-память.

Nokia 5 - единственный телефон, с которым до сих пор работал код, но на 99% android устройствах GetExternalFilesDir не считывает USB-хранилище.

Пожалуйста, кто-нибудь подскажет мне альтернативу или как мне заставить это работать, это очень важно.

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