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

masmat

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

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

  • Посещение

  • Победитель дней

    1

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

  1. Всем привет.

    Есть собственное приложение, в которое нужно передать входные данные из другого приложения через диалог выбора приложений

    Например: "Чужая" программа сформировала строку "Файл вашего доклада можно скачать по адресу doklad.ru/file0001.pdf" и может отправить эту строку в выбранное тобой в диалоге приложение. Скрин диалога во вложении

    Вопрос: как эту строку получить в своем приложении и открыть свое приложение?

     

    IMG_20171202_230815.thumb.png.3684127f7bf3dcc5b9a0590c3f9b577e.png

  2. Перевел проект с Delphi 2010 на XE10 Seatle для Windows

    Ранее использовал компоненты из пакета RzRaise. При переводе поменял все компоненты на типовые

    При сборке приложения выдает вот такие ошибки. Не могу понять откуда взялись ссылки на эти модули и не могу их найти на компе, что бы подсунуть

    [dcc32 Error] E1026 File not found: 'FMXTee.Editor.Picture.fmx'
    [dcc32 Error] E1026 File not found: 'FMXTee.Editor.Brush.fmx'
    [dcc32 Error] E1026 File not found: 'FMXTee.Editor.Stroke.fmx'
    [dcc32 Error] E1026 File not found: 'FMXTee.Editor.Gradient.fmx'
    [dcc32 Error] E1026 File not found: 'FMXTee.Editor.Shadow.fmx'
    [dcc32 Error] E1026 File not found: 'FMXTee.Editor.Panel.fmx'
    Failed


    Кто знает как это лечится?

     

     

  3. Может кто сталкивался с необходимостью установки программно режима "В самолете" для отключения всех сетевых служб, или отключить мобильный интернет и WiFi

    Не могу нигде найти как это сделать.

  4. Вообщем нужно для этого использовать как оказалось функцию SmsManager.sendMultipartTextMessage

    uses   Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony,  Androidapi.Helpers;
    ...
    procedure TForm1.SendSms(Num, mess : string);
    var
      SmsTo, Jmess: JString;
      SmsManager: JSmsManager;
      messageArray: JArrayList;
    begin
      SmsManager := TJSmsManager.JavaClass.getDefault;
      SmsTo := StringToJString(Num);
      Jmess := StringToJString(mess);
      messageArray := smsManager.divideMessage(Jmess); //разбивам сообщение на части массива
      SmsManager.sendMultipartTextMessage(smsTo, nil, messageArray, nil, nil);
    end;

     

  5. Только что, Rusland сказал:

    Может самому разбивать на несколько СМС в зависимости от текста (кол-во символов, лат/кир)?

    Тогда получается, что отправляется два сообщения СМС, т.е. предложение разорвано. А нужно именно "склееное" сообщение, одним текстом

  6. Итак, 1 SMS на латинице вмещает до 160 символов, 1 SMS на кириллице — 70 символов.

    Если Вы хотите отправить длинное сообщение в 2 части и более, то 1 часть SMS на латинице сможет содержать до 153 символов, а 1 SMS на кириллице — до 67 символов.

    Исходный код, приведенный ниже работает хорошо, только если в сообщении до 67 символов Кириллицей, а если символов в сообщении 68 и более, то SMS не отправляется.

    uses   Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony,  Androidapi.Helpers;
    ...
    procedure TFrmMain.BtnSendSmsClick(Sender: TObject);
    var
      SmsTo: JString;
      SmsManager: JSmsManager;
    begin
      SmsManager := TJSmsManager.JavaClass.getDefault;
      SmsTo := StringToJString('+79*********');
      SmsManager.sendTextMessage(smsTo, nil, StringToJString('Test SMS'), nil, nil);
    end;

    Я понимаю, что при превышении определенного кол-ва символов, SMS должна форматироваться в MMS, но отправка все равно не происходит.

    Собственно вопрос, как решить эту проблему.

  7. В 16.01.2016 в 15:27, fsdb сказал:

    создаю пустое приложение. кидаю кнопку и в ней пишу Application.FormFactor.Orientations := [TFormOrientation.InvertedLandscape];

    после выполнения этого приложение закрывается.

    другие приложения где это есть  - сразу на segmentation fault ругаются

    в Delpphi 10 Seatte, в Delphi xe8 работало.

     

    Если возникает проблема с поворотом экрана, нужно отредактировать файл AndroidManifest.template.xml

    Нужно скорректировать выделенную строку

    <%application-meta-data%>

            <!-- Our activity is a subclass of the built-in NativeActivity framework class.

                 This will take care of integrating with our NDK code. -->

            <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"

                    android:label="%activityLabel%"

                    android:configChanges="orientation|keyboard|keyboardHidden|screenSize"

                    android:launchMode="singleTask">

                <!-- Tell NativeActivity the name of our .so -->

                <meta-data android:name="android.app.lib_name"

                    android:value="%libNameValue%" />

                <intent-filter> 

                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />

                </intent-filter>

            </activity>

  8. Отвечу сам

     

    procedure TForm1.ButtonClick(Sender: TObject);
    const cVkPackage = 'com.vkontakte.android';
    var
      Manager: JPackageManager;
      Info: JActivityInfo;
      List: JList;
      I: Integer;
      ResolveInfo: JResolveInfo;
      NativeCompName:JComponentName;
      Intent: JIntent;
    begin
    
      Intent:=TJIntent.Create;
      Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
      Intent.setData(StrToJURI('https://vk.com/адрес_группы'));
    
      Manager :=SharedActivity.getPackageManager;
      List:=Manager.queryIntentActivities(Intent,0);
      for I := 0 to List.size-1 do
        begin
         ResolveInfo:=TJResolveInfo.Wrap((List.get(i)as ILocalObject).GetObjectID);
         Info:=TJActivityInfo.Wrap((ResolveInfo.activityInfo as ILocalObject).GetObjectID);
         if SameText(JStringToString(Info.packageName),cVkPackage) then
           begin
             NativeCompName:=TJComponentName.JavaClass.init(ResolveInfo.activityInfo.applicationInfo.packageName,ResolveInfo.activityInfo.name);
             Intent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER);
             Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
             Intent.setComponent(NativeCompName);
             SharedActivity.startActivity(Intent);
           end;
        end;
    end;
  9. Приложение ВКонтакте на Андроид и обращения к API немного разные вещи (см название раздела). 

     

     

    Ну извините, другого подходящего раздела не нашел  B)

     

    С помощью API можно например вызвать метод groups.isMember,

     

    Это не подходит, т.к. всего лишь "Возвращает информацию о том, является ли пользователь участником сообщества."

     

    Причём используя даже официальный id мобильного приложения ВК всё равно придётся заставить юзера ввести имя и пароль от аккаунта, т.к. токен для выполнения метода другим способом не получить (прямая авторизация не в счёт))

     

    Вот тут как раз хотелось бы, что бы было открыто приложение ВКонтакте, и если оно уже было ранее авторизировано, то сразу открывалась бы группа, если не было ранее авторизации в приложении ВКонтакте, то там уже по схеме самого приложения.

     

    1) Попробовать определить установлено ли приложение на устройстве по наличию папки sdcard0/android/data/com.vkontakte.android

    2) Поискать в гугле "Detect if app is installed on Android" и как-то воспроизвести сие в программе (имеется ввиду вариант с йунити).

     

    Тут впринципе есть с  чем поработать, спасибо.

     

    3) Открыть "С помощью..." ВК ссылку. Знаю такое умеет Total Commander, что будет в данном случае не знаю

     

    Если бы еще знать, как выглядит эта ВК-ссылка, что бы всплыло окно "Открыть с помощью..."

  10. Всем привет. Есть задача:

     

    Из моего приложения необходимо открыть группу ВКонтакте зная ее WEB адрес.

     

    Но! Открыть группу нужно в установленном на смартфоне приложении ВКонтакте, т.е. его нужно найти и открыть в нем группу, соответственно запустив приложение ВКонтакте.

    Если приложение не установлено, то нужно выдать сообщение об ошибке.

     

  11. Народ, настало у меня время добавлять к программе iOS-версию

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

     

    Завтра-послезавтра тоже начинаю в iOS версии Push делать. Пока для себя оставил вот эту закладочку

    Ссылка 

    Может пригодится.

  12. Не знаю поможет ли.

    Недавно обновил свои сертификаты, и в связке ключей были они показаны как не из достоверного источника. И проекты под ними не собирались.

    Оказалось, что 14 февраля закончился срок действия сертификата Apple Worldwide Developer Relations, который подписывает все остальные (на разработку и распространение). Если у вас так же, то ссылка решит проблему.  

     

    Это я знаю, сертификаты обновил, корневой тоже.

    Дело не в этом.

    Но все равно спасибо

  13. Есть проект D10 + iOS 9

     

    При разработке приложение работает хорошо. Ошибок при запуске не возникает.

     

    При сборке приложения для публикации в AppStore присоединяю сертификат Distribution. Но из-за ошибки совместимости с сертификатом Developer приходится этот сертификат (Developer) удалять.

    Сборка пакета ipa проходит без ошибок. Через Loader загружаю приложение в iTunesConnect, все проходит хорошо, приложение принято к рассмотрению.

     

    Но после этого всего приложение перестает запускаться на iPhone, на котором разрабатывалось. А именно:

    1. Запускаю

    2. Загружается заставка

    3. Открывается окно приложения

    4. Через 2-3 секунды закрывается, ошибок при этом не выдает.

    5. Если посмотреть в Диспетчере задач iPhona (два клика по табу), то видно, что приложение якобы запущено (видно окно приложения).

    6. Нажимаю на это окно, оно открывает приложение, но оно не реагирует на нажатия, iPhone виснет на 7-10 секунд и закрывается.

     

    После присоединения сертификата разработчика и компиляции, приложение работает в нормальном режиме.

     

    Может кто-то решал такую проблему?

     

    P.S. удаление сертификатов обусловлено тем, что при загрузке в Loader вылазит ошибка ERROR-90179 и кроме как удалением сертификатов ошибка не решается.

    P.P.S. опубликованная до этого старая версия приложения в AppStore так же себя ведет. Кому не лень можете установить и проверить, приложение называется "Парнас Сити"

  14. Провайдер тебе не нужен, посмотри в статье которую я сегодня выложил, там есть этот момент. Когда приходит Push, вызывается отдельная функция, которая выводит Notification, вне зависимости от состояния программы (в фоне или запущена). На форме никакие провайдеры не нужны. Я там привёл полный рабочий код из проекта для Delphi.

     

    Alex, а Вы не могли бы ссылку на статью отправить, а то не могу найти ее на сервере, может просто не понимаю какую статью искать

  15. Всем спасибо за советы.

    Вообщем результаты.

     

    Оставил на форме:

    • 1 TListView
    • 2 TRectangle
    • 1 TCheckBox
    • 1 TLabel

    + Почистил раздел USES от ненужных вещей

     

    Скорость создания формы, заполнения LiistView  и открытие сократилось до 1 сек.

     

    Т.О. получается, что нужно очень сильно минимизировать кол-во контролов на формах.

  16. отпишитесь о результате, просто стало интересно))

     

    Вообщем вроде как добрался до сути. Поставил секундомер на все операции и как оказалось, я зря грешил на БД.

    В итоге самым затратным по времени оказалось создание и отрисовка формы.

    post-1420-0-88441300-1455307611.png

    Как видно на картинке, с момента нажатия на кнопку (Начали) до факта создания формы (Создали форму) прошло ЦЕЛЫХ 5 секунд (иногда доходило до 8 секунд)

     

    Все остальные операции, включая: замену файла БД из ресурса, выполнение запроса, заполнение и отрисовка ListView, установка видимости 4 Label (зависит от типа запроса) выполнились за 1 секунду.

     

    В итоге, вопрос по тормозам БД снят. Возникает теперь вопрос в увеличении скорости создания формы.

     

    Ну и конечно 2-е и более нажатия на кнопку отрабатывают менее чем за 1 секунду.

     

    Состав формы:

    • 1 TabControl + 3 Закладки
    • 3 ListView
    • 5 Rectangle
    • 5 Label
    • 1 CheckBox

    И вот на создание этого уходит 5-8 секунд. Бедаааааа

  17. Ну попробуйте все таки их поставить! Отпишитесь.

     

    PS а лично использую для подключения компоненты от devart поэтому по вашему коннекту не подскажу. Попробуйте скачать пробную версию devart и сравнить.

     

    Дык вот как-то не хочется использовать сторонние компоненты, потом трудно "переезжать" на новые версии Delphi.

    Один проект VLC так и остался на Delphi 2010 из-за этого, что очень печально.

  18. Хотя меня смущает ваш вопрос, всего 202 записи, это очень мало, что бы так медленно открывалось(

     

    Вот в том то и дело, с таким кол-вом записей индексы не спасут.

    Тем более, что запрос идет по одному полю, а не по всей БД.

     

    У меня есть сомнения на счет скорости обращения к файлу БД, т.к. он лежит на жестком диске. При выполнении запроса процессор можно сказать вообще не используется

  19.  

     запрос и заполнение ListView

     

     

    почему-то мне кажется, что заполнение ListView происходит мгновенно

    уточните, что съедает время - открытие датасета или все-таки подключение к БД?

     

    Подключение к БД происходит один раз, при первом обращении к ней. Так, что постоянного запроса на подключение нет.

     

    Скорее всего это открытие датасета.

    А есть ли вообще в мобильной платформе какое-нить ограничение скорости по чтению жесткой памяти?

  20. Есть база SQLLite, 202 записи, 27 полей (столбцов). Объем 1,9 мб

    Разработка в Delphi 10 Seatle Проекты для Android  и iOS отдельные, лишних модулей (разных платформ) нет.

    SDK последних версий.

     

    Есть запрос

    select distinct Cat1 from client where Tip="s"  Order By Cat1

    Результат запроса 12 записей, которые потом заполняются в ListView

          LV.BeginUpdate;
          LV.Items.Clear;
    
            while not Query.Eof do
              begin
                  LItem := LV.Items.Add;
                  LItem.Text := Query.FieldByName('Cat1').AsString;
                  Query.Next;
               end;
          LV.EndUpdate;

    Вопрос:

    В первый раз запрос и заполнение ListView отрабатывается в течении 4-5 секунд. В следующий раз все отрабатывает за 1 секунду.

    и так с каждым запросом.

     

    Почему так происходит? Может кто-нить решал уже такую проблему?

    Данное поведение наблюдается и на Android, и на iOS.

     

     

     

     

     

     

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