Перейти к содержанию
Fire Monkey от А до Я

Mazzay

Пользователи
  • Постов

    58
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Mazzay

  1. 10 минут назад, Andrey Efimov сказал:

     

    А через ADB?

     

    Ни разу не пользовал. Поизучаю…

    10 минут назад, Andrey Efimov сказал:

    и на всякий случай спрошу, режим разработчика и отладка, на устройстве точно включены?

     

    2 часа назад, Mazzay сказал:

    Сам планшет подключен кабелем, в Project Manager в Target он виден и активен.

    Без режима разработчика устройство пропадает из Target.

  2. ПК перезагружался уже многократно. Планшет — тоже. Стабильно тормозит на этапе «Installing». :(

    Приложение при этом не устанавливается.

     

    Стабильно именно на этих планшетах. Что-то, видимо, именно с ними. Но не могу понять, что.

  3. После компиляции и линковки выводит: «Deploying», «Stripping Symbol», «Packaging», «Singing», «Installing»…

    «Installing» висит бесконечно. Нажатие на «Cancel» выдаёт «Unable to create process: Operation canceled by user».

    Такое происходит на планшетах DIGMA Plane 7700B (их несколько). На остальных устройствах и на эмуляторах запускается нормально.

    Сам планшет подключен кабелем, в Project Manager в Target он виден и активен. Не пойму, куда копать, так как никаких ошибок не выдаётся, а просто не завершается этап «Installing».

     

  4. 4 часа назад, krapotkin сказал:

    Там несколько функций GetShared...Path() 

    попробуйте другую

    Фух! Вот уж воистину. Бьёшься-бьёшься — не получается. Спросишь в интернете — и наведут на решение. Всё, что GetShared… не работает. Android 5.1 без карты памяти не хочет сохранять туда файл. У меня по крайней мере. Но очередной просмотр доступных методов у TPath навёл меня на вот какой: GetPublicPath. Описание от Embarcadero у него следующее:

    Цитата

    Returns the path to the directory where you can store application data that can be shared with other applications.

    http://docwiki.embarcadero.com/Libraries/Berlin/en/System.IOUtils.TPath.GetPublicPath

    Собственно, судя по описанию, то, что нужно. Пробую. Не работает. На эмуляторе GetPublicPath возвращает пустую строку. :(

    Из описания:

    Цитата

    If the system running your application does not support the requested folder, or if the requested folder does not exist in the system, this function returns an empty string instead.

    Расстроился. Но на всякий случай попробовал на реальном устройстве под Android 5.1. И о, чудо! GetPublicPath возвращает «/storage/sdcard0/Android/data/com.<ХХХХ.myappname>/files» и установка apk оттуда через Intent замечательно работает. Проводник тоже видит эту папку и файлы в ней.

    На Android 4.2 тоже работает.

     

    Всем большое спасибо!

  5. 31 минуту назад, krapotkin сказал:

    Ошибка при синтаксическом анализе пакета у меня была, когда файл не докачался, т.е. по-сути, битый

    Эмулятор Android 5.1 качает apk c компьютера-хоста. «Битость» фактически исключается. Но ошибку выдаёт. Смартфон под Android 4.2 успешно качает и устанавливает этот же apk и по воздуху.

  6. 15 минут назад, Кривяков Виталий сказал:

    Рекомендую в коде проверять наличие общих папок. Недавно столкнулся на 6 андроиде с тем, что  GetSharedDocumentPath не существовала. Просто создал ее и приложение заработало.

    Спасибо! Очень дельный совет. Наверняка очень многие будут об это спотыкаться. Добавлю себе создание несуществующих папок на всякий случай. Но!

    Android 5.1 без внешней карты памяти не даёт мне создать ничего в путях из списка GetShared... К примеру, GetSharedDocumentPath возвращает «/storage/sdcard/Documents». Тот же «ES Проводник» не может ничего создать в папке «/storage/sdcard» и пишет «SDCard отключена».

    На 5.1 сохранение загруженного apk-файла у меня получается только в internal storage (4.2 позволяет сохранять куда угодно). Сохраняю в GetDocumentsPath (без …Shared…) и при запуске через Intent этого apk получаю «Ошибка при синтаксическом анализе пакета». (Сообщение «access/permission denied» что-то никак не могу повторить.) Такое сообщение и на 5.1, и на 4.2 (при запуске apk, сохранённого в internal storage). Если на 4.2 сохранить куда-нибудь в …Shared…, то этот же пакет замечательно устанавливается.

    Я думаю, что установщик пытается открыть apk для анализа, но не может и выдаёт сообщение об ошибке при анализе.

  7. Моё приложение при запуске проверяет номер версии и при необходимости обновляется. Обновляется следующим образом: грузит с сервера и сохраняет на устройстве apk-пакет и запускает его на выполнение. Всё замечательно работало до перехода на Android 5.1. Загрузка пакета осуществляется в папку, возвращаемую GetSharedDownloadsPath. Запуск обновления производится следующим кодом:

    _di_JIntent Intent;
    _di_Jnet_Uri oUri;
    _di_JFile oPath;
    _di_JFile oFile;
    
    oPath = TJFile::JavaClass->init(StringToJString(fPath)); // fPath = System::Ioutils::TPath::GetSharedDownloadsPath();
    oFile = TJFile::JavaClass->init(oPath, StringToJString(fFile)); // fFile = L"myapp.apk"
    oUri = TJnet_Uri::JavaClass->fromFile(oFile);
    
    Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW);
    Intent->setDataAndType(oUri, StringToJString(L"application/vnd.android.package-archive"));
    Intent->setFlags(TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK);
    SharedActivity()->startActivity(Intent);
    Application->Terminate();

    На Android 5.1 на выполнении этого кода получаю сообщение "... Access denied."

    Не помню, где, нарыл следующее:

    Цитата

    Примечание. Каталог вашего приложения во внутренней памяти указывается с использованием имени пакета приложения в определенном месте файловой системы Android. Технически другое приложение может прочитать ваши файлы во внутренней памяти, если вы установите для файлов режим Readable (доступно для чтения). Однако для этого другому приложению должны быть известны имя пакета вашего приложения и имена файлов. Другие приложения не могут просматривать внутренние каталоги вашего приложения и не имеют разрешений на чтение или запись, если вы специально не установите для своих файлов режим Readable (доступно для чтения) или Writable (доступно для записи). Следовательно, пока вы будете использовать режим MODE_PRIVATE для своих файлов во внутренней памяти, они будут недоступны другим приложениям.

    Как установить для файла режим Readable, чтобы его могло читать другое приложение?

     

    P.S. Внешней карты памяти на устройстве нет. Если её вставить, то работает, ибо с ней GetSharedDownloadsPath возвращает путь именно на внешней карте. Втыкание внешней карты пока рассматривается только как временный костыль, но он не очень интересен, так как устройств, на которых работает приложение 18 штук — не хочется покупать 18 карточек.

×
×
  • Создать...