Kitty
-
Постов
792 -
Зарегистрирован
-
Посещение
-
Победитель дней
16
Активность репутации
-
Kitty получил реакцию от Roman V в Программа не запускается под Android
#include <System.IniFiles.hpp> #include <System.IOUtils.hpp> #include <memory> //**** #ifdef __ANDROID__ String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), L"options.ini"); #elif _Windows String path = System::Ioutils::TPath::Combine(ExtractFilePath(ParamStr(0)), L"options.ini"); #endif if(FileExists(path)) { std::unique_ptr<TIniFile> FileINI(new TIniFile(path)); String ip = FileINI->ReadString(L"HOST", L"ip", L"127.0.0.1"); //**** 1. std::unique_ptr используется чтобы избавиться от delete. std::unique_ptr все делает сам.
2. Файл ini для Андроида надо сохранить в UTF-8.
-
Kitty отреагировална Andrey Efimov в Политика конфиденциальности
Вопросы:
На какой версии Андроида проверяете?
Вы точно удалили разрешение из манифеста? Проверьте итоговый манифест.
Чуть позже, сам смогу проверить на разных версиях Андроид.
Можете приложить файл манифеста из папки Проект/Android/Debug или Realese/.
Ап.
P.s. ок, вижу, вопрос решился.
-
Kitty отреагировална Andrey Efimov в Политика конфиденциальности
Вероятно, почти очевидно, что на устройствах с АПИ 14 будет вываливаться ошибка о том, что нет необходимого разрешения. Прочитайте 3 последних сообщения, где я привёл примеры касательно пушей.
Ну и от себя могу добавить, зачем вам поддерживать столь древние устройства? Если верить Platform Versions, таких устройств осталось всего 0.7%. Сейчас можно смело ставить minSdkVersion = 16.
-
Kitty отреагировална Andrey Efimov в Политика конфиденциальности
Ну смотрите, если я правильно понял, то данное разрешение требуется до Андроид 4.0.4 (включительно). И учитывая тот факт, что вы хотите поддерживать максимальное количество устройств, то должен сработать такой способ (описанный в сообщении выше):
Строка будет выглядеть так:
<uses-permission android:name="android.permission.GET_ACCOUNTS" android:maxSdkVersion="15" /> Разрешение будет запрашиваться на всех версиях до той (включительно), которую вы указали.
Но, опять же нужно протестировать приложение как минимум на версиях Андроид 4.0 - 4.1.2 и Андроид 4.4.2 и выше. Это очень важно сделать, т.к. поведение может отличаться от ожидаемого. (мне с пушами пока не особо доводилось связываться, в теории, изменение в манифесте должно помочь). Если проверите, то обязательно отпишитесь сюда о результатах.
-
Kitty отреагировална Fedor K в TWebBrowser и неверный ssl сертификат на сайте.
Причина такого поведения довольно простая - java библиотеки FMX часто передают в Delphi только уведомление о событии, без непосредственного влияния на процесс. Открываем библиотеку fmx.jar и смотрим код класса WebClient (package com.embarcadero.firemonkey.webbrowser;):
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { super.onReceivedSslError(view, handler, error);// обработка ошибки происходит здесь по дефолту if (this.mListener != null) { this.mListener.onReceivedSslError(view, handler, error);//передача в Delphi лишь уведомления, что событие произошло } } Одно из решений*:
1. Заменяем** код на:
public void onReceivedSslError(WebView paramWebView, SslErrorHandler paramSslErrorHandler, SslError paramSslError) { if (this.mListener != null) { this.mListener.onReceivedSslError(paramWebView, paramSslErrorHandler, paramSslError);//Delphi обработчик } else { super.onReceivedSslError(paramWebView, paramSslErrorHandler, paramSslError);//обработчик по умолчанию } } После манипуляций получаем свою версию библиотеки, мой пример здесь (Delphi Berlin).
2. Подключаем библиотеку к проекту (скриншот ниже).
3. Копируем unit FMX.WebBrowser.Android в папку своего проекта и меняем следующие строки:
procedure TAndroidWebBrowserService.TWebBrowserListener.onReceivedSslError( P1: JWebView; P2: JSslErrorHandler; P3: JSslError); begin P2.proceed;//добавляем разрешение для истекших сертификатов FWBService.FailLoadingWithError;//стандартный обработчик OnDidFailLoadWithError end; *Если вариант изменения кода java библиотек совсем не подходит, можно реализовать все средствами Delphi. Для этого создаем свою реализация класса WebViewClient (или WebClient) и задаем его для JWebBrowser:
//все тот же unit FMX.WebBrowser.Android; procedure TAndroidWebBrowserService.InitUIThread; var lClient : TWebBrowserCLientFix;//наш класс begin FJWebBrowser := TJWebBrowser.JavaClass.init(TAndroidHelper.Activity); FJWebBrowser.getSettings.setJavaScriptEnabled(True); lClient := TWebBrowserCLientFix.Create(Self); FJWebBrowser.setWebViewClient(lClient);//меняем на наш класс FListener := TWebBrowserListener.Create(Self); lClient.SetWebViewListener(FListener); //комментируем //FJWebBrowser.SetWebViewListener(FListener); **Замена кода происходит по тому же сценарию, как и создание своих собственных классов на java. Если кому потребуется помощь - пишите, я помогу ответами и примером.
-
Kitty отреагировална Ingalime в [Андроид] статья ZuBy и фантомный пуш
Избавление от фонтомных пушей - замена посылки пуша с get на post. Соотвественно изменение php сервера.
Решение подсказано Fedor K.
-
Kitty отреагировална Евгений Корепов в [Статья] PHP сервер для рассылки Push на Android и iOS
По идее флаг нужно убирать при NotRegistered однозначно. При инвалидской регистрации тоже.
Лучше пользоваться не http интерфейсом Firebase, а XMPP, там, насколько я знаю, можно получать всю инфу, вплоть до подтверждения получения пуша клиентом.
В скрипте и не отправляются сообщения на не активные токены, по крайней мере у меня, зачем? В SQL запросе "WHERE active = 1" решает проблему.
P.S. Надо задуматься над коммерческим PUSH сервером ;-) Площадок у меня есть, голова и руки тоже. Сделать по 50 рублей в месяц подписку. Чтоб зашел, зарегился, вбил свои данные и создавай push проекты, отправляй, получай и все такое...
-
Kitty получил реакцию от ENERGY в Отправка пуша из консоли firebase
Спасибо получилось.
Для таких не умных как я, которые не понимают, что в консоли FCM надо писать самой:
1. Откройте дополнительные параметры в консоли FCM .
2. В первом поле КЛЮЧ принудительно самостоятельно напечатайте "mеssage" без ошибок в первом поле. В поле напротив напишите текст сообщения.
3. При этом появиться дополнительные поля ввода ниже.
4. В первом новом поле ниже напишите принудительно title без ошибок и напротив в значении ваш текст...
-
Kitty отреагировална Ingalime в [Андроид] статья ZuBy и фантомный пуш
Получилась программа по отсылке пушей при взаимодействии с сервером PHP ZuBy. Кто пользуется этим PHP сервером и кого есть время покритикуйте...
Скачать: http://my-files.ru/uwtv19
-
Kitty получил реакцию от Ingalime в [Андроид]контроль интревала времени в сервисе
Спасибо.
Не до конца понятно... Несколько разных мнений и рекомендаций... Можно показать на паскале единственно правильное решение для службы андроида, где делаеться отсечка времени в 60 минут для сработки события.
Спасибо.
-
Kitty отреагировална Rusland в [Андроид]контроль интревала времени в сервисе
Стандартный TTimer использовать нельзя. Тут посмотрите
-
Kitty отреагировална ENERGY в Автоматизация работы со стилями
Вы бы рассказали что там происходит в ролике, а то не у всех есть лишние 40 минут.
Offtop
Есть один отличный прием, о котором мало кто знает.
Если вам нужно поработать со стилем от моб. платформы на Windows (так гораздо быстрее программировать и отлаживать GUI) - можно просто открыть в текстовом редакторе style файл, найти в нем строку platform и заменить ее с напр. ANDROID на MSWINDOWS, сохранить, а затем загрузить в текущий Default стиль.
-
Kitty отреагировална ENERGY в Сортировка TListViewItems
Что то я не понял в чем проблема у автора.
Стандартный метод сортировки работает (Delphi Berlin).
uses System.Generics.Defaults; ... procedure TForm1.ButtonSortClick(Sender: TObject); var Comparer: IComparer<TListViewItem>; begin Comparer := TDelegatedComparer<TListViewItem>.Create( function(const LeftItm, RightItm: TListViewItem): Integer begin Result := CompareText(LeftItm.Text, RightItm.Text); end); ListView1.Items.Sort(Comparer); end; А также можно по Data
procedure TForm1.ButtonSortClick(Sender: TObject); var Comparer: IComparer<TListViewItem>; begin Comparer := TDelegatedComparer<TListViewItem>.Create( function(const LeftItm, RightItm: TListViewItem): Integer begin Result := 0; //no change if LeftItm.Data['number'] > RightItm.Data['number'] then Result := 1 //depend on sort order asc/desc else if LeftItm.Data['number'] < RightItm.Data['number'] then Result := -1; //depend on sort order asc/desc end); ListView1.Items.Sort(Comparer); end;
Не забудьте BeginUpdate - EndUpdate.
Напомню что к объектам ListViewItem можно обращаться не через Data['name'], а напрямую через индексы, что гораздо быстрее, т.к. не нужно сравнивать все строки в цикле, это важно при большом количестве Objects per Item (напр. больше 5 в режиме DynamicAppearance).
-
Kitty получил реакцию от Andrey Efimov в [Android] BeaconServiceDemo стандартный пример не работает
Вспомнила, что об этом уже говорил master webs:
http://fire-monkey.ru/topic/2734-вызов-приложения-из-нофитикейшена/?do=findComment&comment=17497
Просьба проголосовать ибо это касается дельфи, а телефонов с андроид 4.4 много у пользователей:
https://quality.embarcadero.com/browse/RSP-18117
Возможно не работает и версии Андроид 5, но такого устройства под рукой нет, чтобы проверить...
-
Kitty отреагировална Brovin Yaroslav в Toast и tDuration
Добрый день,
На андроиде нет такой возможности. Там эти два режима задаются через константы и не имеют привязки к конкретным значениям времени.
-
Kitty отреагировална Andrey Efimov в Исключить устройства с Intel Atom как не поддерживаемые
Оф. справка: Workaround for Android 4.0/Kindle Fire Message: "Application does not support this device"
-
Kitty отреагировална ENERGY в Фотография стандартной камерой смартфона
@Barbanel
Никаких проблем c этим кодом не было с 4 и 5 Android. На 6 не проверял. Точно такой же код пишет народ на Java там тоже никаких проблем по этому поводу не писали.
Чтобы убедиться что проблема точно не в паузе, попробуйте установить sleep на 10- 20 секунд.
Может вы не закрываете курсор после какого то из запросов раньше?
да еще момент, в Action TakePhotoFromCameraAction нужно установить свойство NeedSaveToAlbum := true . Возможно это ключевой момент в вашем вопросе (т.к. на некоторых телефонах (привет HTC) фотки сохраняются в галерею даже если NeedSaveToAlbum = false, это уже баг конкретной модификации Андроида).
-
Kitty отреагировална Равиль Зарипов (ZuBy) в XE10.2 Tokyo есть запись вебинара от 28.03.2017?
это просто печенька для разрабов, чтобы не сваливали со студии. Мол всё будет, но "завтра"
-
Kitty отреагировална Евгений Корепов в XE10.2 Tokyo есть запись вебинара от 28.03.2017?
Какой то странный хотфикс. Ничего не фиксит. Мой запрос https://quality.embarcadero.com/browse/RSP-17813 не пофиксили.
"We also have an Android compatibility patch in the works to address Android issues around text input, control rendering and performanc" - я правильно перевел? Мы так же имеем фикс для самых насущных глюков, но вам не покажем.
-
Kitty отреагировална ElenaS. в Новая версия FastReport FMX
Добрый день. Теперь у продукта универсальный установщик, вместо отдельных для каждой версии. На сайте поменяли.
-
Kitty отреагировална enatechno в XE10.2 Tokyo есть запись вебинара от 28.03.2017?
Похоже первый hotfix .
-
Kitty отреагировална Равиль Зарипов (ZuBy) в Ошибка при получении фото от камеры
разрешения нужны, т.к. папка в которую автоматически сохраняется файл, не является директорией проекта
а значит используется запись и чтение с внешнего носителя
-
Kitty отреагировална ArturAD в GCMIntentService или Multiline Push and Local Notification
Это стандартная работа. Если нажать и потянуть вниз за сообщение, то тоже появится перенос.
-
Kitty отреагировална Евгений Корепов в [Статья] Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]
Равиль, сразу извиняюсь, готов понести наказание, но запощу решение.
Как уже говорил все просто, если у вас 4345 сообщений, то делим массив токенов и отправляем 4 раза по 1000, и один раз 345. Не забывайте что вы программисты, и во всех языках программирования это делается одинаково просто. Вот код, писал прямо в гитхабе, естественно не проверял, если что то упустил, прошу прощения (а упустил я анализ результата).
function pushSendOver1000($title, $text, $tokens, $server_key) { $Count_Success = 0; $DeviceCountMax = 1000; $DeviceCountIndex = 0; $DevicesTokenPacketArray = array(); while ($DeviceCountIndex<=count($tokens)) { $DevicesTokenPacketArray = array_slice($tokens, $DeviceCountIndex, $DeviceCountMax); pushSend($title, $text, $DevicesTokenPacketArray, $server_key); $DeviceCountIndex = $DeviceCountIndex + $DeviceCountMax; } } Запостил также на гитхаб. Можете ручками добавить функцию в конец https://github.com/rzaripov1990/PUSHTestFCM/blob/master/pushTest/push.php и соответственно вызывать не pushSend, а pushSendOver1000
-
Kitty отреагировална Равиль Зарипов (ZuBy) в Кнопки у ListVew ItemAppearance
все что связано с размерами высчитывается вручную в событии OnUpdateObjects
две текстовые кнопки