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

masmat

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

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

  • Посещение

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

    1

Активность репутации

  1. Like
    masmat получил реакцию от Константин Паньков в Обновление файла БД без перезапуска приложения   
    При указанном мной способе, файл перезаписывается на УРА 
  2. Like
    masmat получил реакцию от Вадим Шавров в Обновление файла БД без перезапуска приложения   
    Под Android я делаю так. Вставляю изначально файл БД в Deploy.
    Потом вызываю при необходимости процедуру
    procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } var   PackageName: JString;   zip: TZipFile; begin      // Отключаемся от базы       FDConnection1.Connected := False;       // Получаем имя apk файла       PackageName := SharedActivityContext.getPackageResourcePath;       if TFile.Exists(JStringToString(PackageName)) then       begin         // Удаляем старый файл базы         TFile.Delete(TPath.GetHomePath + PathDelim + 'DBGK.db');         // Извлекаем новый файл базы         zip := TZipFile.Create;         zip.Open(JStringToString(PackageName), TZipMode.zmRead);         zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False);         zip.Close;         zip.free; end;   // Подключаемся к базе   FDConnection1.Connected := True; end;  
    Под iOS вставляю в ресурсы, потом вот так
     
    procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } begin      // Отключаемся от базы       FDConnection1.Connected := False;   if FindResource(0, 'res_bd', PChar(RT_RCDATA)) <> 0 then     rs_bd := TResourceStream.Create(0,'res_bd',PChar(RT_RCDATA));   if TFile.Exists(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db') then     begin       TFile.Delete(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');       rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');     end   else     begin       rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');     end;   FDConnection1.Connected := True; end;
  3. Like
    masmat отреагировална Andrey Efimov в Как получить входные данные из других приложений?   
    Если правильно понял, то вам необходимо использовать intent-filter.
  4. Like
    masmat отреагировална Andrey Efimov в opendialog для папок   
    Так не устраивает?
    procedure TFormMain.sbSelectFolderClick(Sender: TObject); var PathFolder: string; begin if SelectDirectory('Выбор папки...', '', PathFolder) then ePathFolder.Text := PathFolder; end; SelectDirectory
  5. Like
    masmat получил реакцию от ENERGY в Обновление файла БД без перезапуска приложения   
    Под Android я делаю так. Вставляю изначально файл БД в Deploy.
    Потом вызываю при необходимости процедуру
    procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } var   PackageName: JString;   zip: TZipFile; begin      // Отключаемся от базы       FDConnection1.Connected := False;       // Получаем имя apk файла       PackageName := SharedActivityContext.getPackageResourcePath;       if TFile.Exists(JStringToString(PackageName)) then       begin         // Удаляем старый файл базы         TFile.Delete(TPath.GetHomePath + PathDelim + 'DBGK.db');         // Извлекаем новый файл базы         zip := TZipFile.Create;         zip.Open(JStringToString(PackageName), TZipMode.zmRead);         zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False);         zip.Close;         zip.free; end;   // Подключаемся к базе   FDConnection1.Connected := True; end;  
    Под iOS вставляю в ресурсы, потом вот так
     
    procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } begin      // Отключаемся от базы       FDConnection1.Connected := False;   if FindResource(0, 'res_bd', PChar(RT_RCDATA)) <> 0 then     rs_bd := TResourceStream.Create(0,'res_bd',PChar(RT_RCDATA));   if TFile.Exists(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db') then     begin       TFile.Delete(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');       rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');     end   else     begin       rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');     end;   FDConnection1.Connected := True; end;
  6. Like
    masmat получил реакцию от Олег Киреев в Обновление файла БД без перезапуска приложения   
    При указанном мной способе, файл перезаписывается на УРА 
  7. Like
    masmat получил реакцию от Олег Киреев в Обновление файла БД без перезапуска приложения   
    Под Android я делаю так. Вставляю изначально файл БД в Deploy.
    Потом вызываю при необходимости процедуру
    procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } var   PackageName: JString;   zip: TZipFile; begin      // Отключаемся от базы       FDConnection1.Connected := False;       // Получаем имя apk файла       PackageName := SharedActivityContext.getPackageResourcePath;       if TFile.Exists(JStringToString(PackageName)) then       begin         // Удаляем старый файл базы         TFile.Delete(TPath.GetHomePath + PathDelim + 'DBGK.db');         // Извлекаем новый файл базы         zip := TZipFile.Create;         zip.Open(JStringToString(PackageName), TZipMode.zmRead);         zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False);         zip.Close;         zip.free; end;   // Подключаемся к базе   FDConnection1.Connected := True; end;  
    Под iOS вставляю в ресурсы, потом вот так
     
    procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } begin      // Отключаемся от базы       FDConnection1.Connected := False;   if FindResource(0, 'res_bd', PChar(RT_RCDATA)) <> 0 then     rs_bd := TResourceStream.Create(0,'res_bd',PChar(RT_RCDATA));   if TFile.Exists(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db') then     begin       TFile.Delete(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');       rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');     end   else     begin       rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db');     end;   FDConnection1.Connected := True; end;
  8. Like
    masmat получил реакцию от Brovin Yaroslav в [Android] [XE7] Какой компонент выбрать для карты?   
    Ярослав, Вы забыли указать, что компонент допускает в бесплатном варианте до 1000 сессий, потом он не будет работать.
  9. Like
    masmat отреагировална krapotkin в TNotificationCenter CancelNotification Непонятный параметр   
    Поправьте меня, если я неправ, plz. Просто очень сливаются два разных понятия. TPushNotification и TNotification
    Когда приходит push, ОС создает уведомление (Notification) в шторке.
    Далее, если программа запущена, то вызывается ее обработчик пушей. Если нет то пуши сидят где-то и ждут.
    Когда я запускаю программу, я просматриваю StartupNotifications - (это TPushNotification)
      ps:=AServiceConnection.Service;   for LNotification in ps.StartupNotifications do и что-то делаю по пришедшим пушам, например, перехожу сразу на какую-то дальнюю форму...
    Далее мне хочется стереть соответствующее уведомление в шторке как отработанное.
    В известном примере стирают всё разом. TNotificationCenter.Create(NIL).CancelAll();
    Но у класса есть метод TNotificationCenter.Create(NIL).CancelNotification(AName:String);
    Так вот, вопрос (добрался все-таки)))
    Как сопоставить TPushNotification и TNotification? Где взять AName?
  10. Like
    masmat отреагировална krapotkin в Долгая загрузка формы   
    думаю, нормально для такой схемы - это собственная отрисовка
    FMX-компоненты не подходят именно из-за перегрузки стилями и разделения на слои абстракции. Они просто для другого заточены.
    Тут прямая дорога просто отрисовывать свои компоненты. Имхо это совсем несложно. В этом случае FMX будет, наоборот, быстрее за счет использования DirectX
  11. Like
    masmat получил реакцию от Rusland в Кол-во символов в SMS   
    Вообщем нужно для этого использовать как оказалось функцию 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;  
  12. Like
    masmat отреагировална krapotkin в Кол-во символов в SMS   
    поднимите документацию, она есть, и даже по-русски можно найти
    общий смысл в том, что действительно отправляются они как несколько СМС, но в конце каждого текста проставляется номер куска
    именно поэтому, если одна смс - то 70 символов, если две - 2*67
    склейка происходит на принимающей стороне программно
  13. Like
    masmat получил реакцию от #WAMACO в Application.FormFactor.Orientations   
    Если возникает проблема с поворотом экрана, нужно отредактировать файл 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>

  14. Like
    masmat получил реакцию от zairkz в Application.FormFactor.Orientations   
    Если возникает проблема с поворотом экрана, нужно отредактировать файл 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>

  15. Like
    masmat отреагировална Nick N. в Запретить смену ориентации экрана   
    Может кому-то еще пригодиться: проблема решилась заменой строчки в манифесте на  android:configChanges="orientation|keyboardHidden|screenSize"
     
  16. Like
    masmat получил реакцию от Brovin Yaroslav в Application.FormFactor.Orientations   
    Если возникает проблема с поворотом экрана, нужно отредактировать файл 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>

  17. Like
    masmat получил реакцию от Rusland в Application.FormFactor.Orientations   
    Если возникает проблема с поворотом экрана, нужно отредактировать файл 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>

  18. Like
    masmat отреагировална Brovin Yaroslav в TChart ест память?   
    Запускаю ваш проект на XE7 под Widnows 64Bit. Рост памяти не вижу. Специально сделал частоту генерации данных, 10 раз в секунду. Прикладываю скриншоты анализа используемой памяти. Как видно на графиках, рост памяти не наблюдается на графике, постоянен и равен 33,4 Мб. 

     
    При удалении TeeChart все корректно происходит. Память занимаемая самим компонентом отдается менеджеру памяти Delphi, а не системе. А менеджер делфи будет держать ее у себя для новых ваших объектов. Поэтому вы не увидите на системном графике, что память отдана обратно приложением операционной системе. 
     
  19. Like
    masmat получил реакцию от zairkz в Как запустить приложение ВКонтакте из своего приложения?   
    Отвечу сам
     
    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;
  20. Like
    masmat отреагировална Равиль Зарипов (ZuBy) в Notification   
    перенесли ведь сюда
    uses System.Notification
  21. Like
    masmat получил реакцию от rareMax в Как запустить приложение ВКонтакте из своего приложения?   
    Отвечу сам
     
    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;
  22. Like
    masmat получил реакцию от Вячеслав в Как запустить приложение ВКонтакте из своего приложения?   
    Всем привет. Есть задача:
     
    Из моего приложения необходимо открыть группу ВКонтакте зная ее WEB адрес.
     
    Но! Открыть группу нужно в установленном на смартфоне приложении ВКонтакте, т.е. его нужно найти и открыть в нем группу, соответственно запустив приложение ВКонтакте.
    Если приложение не установлено, то нужно выдать сообщение об ошибке.
     
  23. Like
    masmat отреагировална nek в Как запустить приложение ВКонтакте из своего приложения?   
    Приложение ВКонтакте на Андроид и обращения к API немного разные вещи (см название раздела). С помощью API можно например вызвать метод groups.isMember,но из своего приложения (в рамках FMX). Причём используя даже официальный id мобильного приложения ВК всё равно придётся заставить юзера ввести имя и пароль от аккаунта, т.к. токен для выполнения метода другим способом не получить (прямая авторизация не в счёт)).
     
    Можно:
    1) Попробовать определить установлено ли приложение на устройстве по наличию папки sdcard0/android/data/com.vkontakte.android
    2) Поискать в гугле "Detect if app is installed on Android" и как-то воспроизвести сие в программе (имеется ввиду вариант с йунити).
    3) Открыть "С помощью..." ВК ссылку. Знаю такое умеет Total Commander, что будет в данном случае не знаю))
  24. Like
    masmat получил реакцию от Kitty в Крах повторного запуска приложения   
    Отвечу сам.
    После длительных танцев с бубном, оказалось, что все таки два сертификата могут работать друг с другом, но нужно сделать два разных узла в "Связке ключей", что бы они не совпадали именами.
  25. Like
    masmat получил реакцию от zairkz в Push под iOS   
    Завтра-послезавтра тоже начинаю в iOS версии Push делать. Пока для себя оставил вот эту закладочку
    Ссылка 
    Может пригодится.
×
×
  • Создать...