-
Постов
75 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Активность репутации
-
masmat получил реакцию от Константин Паньков в Обновление файла БД без перезапуска приложения
При указанном мной способе, файл перезаписывается на УРА
-
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; -
masmat отреагировална Andrey Efimov в Как получить входные данные из других приложений?
Если правильно понял, то вам необходимо использовать intent-filter.
-
masmat отреагировална Andrey Efimov в opendialog для папок
Так не устраивает?
procedure TFormMain.sbSelectFolderClick(Sender: TObject); var PathFolder: string; begin if SelectDirectory('Выбор папки...', '', PathFolder) then ePathFolder.Text := PathFolder; end; SelectDirectory
-
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; -
masmat получил реакцию от Олег Киреев в Обновление файла БД без перезапуска приложения
При указанном мной способе, файл перезаписывается на УРА
-
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; -
masmat получил реакцию от Brovin Yaroslav в [Android] [XE7] Какой компонент выбрать для карты?
Ярослав, Вы забыли указать, что компонент допускает в бесплатном варианте до 1000 сессий, потом он не будет работать.
-
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?
-
masmat отреагировална krapotkin в Долгая загрузка формы
думаю, нормально для такой схемы - это собственная отрисовка
FMX-компоненты не подходят именно из-за перегрузки стилями и разделения на слои абстракции. Они просто для другого заточены.
Тут прямая дорога просто отрисовывать свои компоненты. Имхо это совсем несложно. В этом случае FMX будет, наоборот, быстрее за счет использования DirectX
-
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;
-
masmat отреагировална krapotkin в Кол-во символов в SMS
поднимите документацию, она есть, и даже по-русски можно найти
общий смысл в том, что действительно отправляются они как несколько СМС, но в конце каждого текста проставляется номер куска
именно поэтому, если одна смс - то 70 символов, если две - 2*67
склейка происходит на принимающей стороне программно
-
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>
-
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>
-
masmat отреагировална Nick N. в Запретить смену ориентации экрана
Может кому-то еще пригодиться: проблема решилась заменой строчки в манифесте на android:configChanges="orientation|keyboardHidden|screenSize"
-
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>
-
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>
-
masmat отреагировална Brovin Yaroslav в TChart ест память?
Запускаю ваш проект на XE7 под Widnows 64Bit. Рост памяти не вижу. Специально сделал частоту генерации данных, 10 раз в секунду. Прикладываю скриншоты анализа используемой памяти. Как видно на графиках, рост памяти не наблюдается на графике, постоянен и равен 33,4 Мб.
При удалении TeeChart все корректно происходит. Память занимаемая самим компонентом отдается менеджеру памяти Delphi, а не системе. А менеджер делфи будет держать ее у себя для новых ваших объектов. Поэтому вы не увидите на системном графике, что память отдана обратно приложением операционной системе.
-
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; -
masmat отреагировална Равиль Зарипов (ZuBy) в Notification
перенесли ведь сюда
uses System.Notification -
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; -
masmat получил реакцию от Вячеслав в Как запустить приложение ВКонтакте из своего приложения?
Всем привет. Есть задача:
Из моего приложения необходимо открыть группу ВКонтакте зная ее WEB адрес.
Но! Открыть группу нужно в установленном на смартфоне приложении ВКонтакте, т.е. его нужно найти и открыть в нем группу, соответственно запустив приложение ВКонтакте.
Если приложение не установлено, то нужно выдать сообщение об ошибке.
-
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, что будет в данном случае не знаю))
-
masmat получил реакцию от Kitty в Крах повторного запуска приложения
Отвечу сам.
После длительных танцев с бубном, оказалось, что все таки два сертификата могут работать друг с другом, но нужно сделать два разных узла в "Связке ключей", что бы они не совпадали именами.
-
masmat получил реакцию от zairkz в Push под iOS
Завтра-послезавтра тоже начинаю в iOS версии Push делать. Пока для себя оставил вот эту закладочку
Ссылка
Может пригодится.