-
Постов
163 -
Зарегистрирован
-
Посещение
-
Победитель дней
19
Активность репутации
-
mazayhin получил реакцию от Anatoliy в Как узнать Device Name на Андроиде?
Это будет имя Bluetooth-адаптера.
//uses System.Bluetooth; TBluetoothManager.Current.CurrentAdapter.AdapterName
-
mazayhin получил реакцию от Barbanel в Как узнать Device Name на Андроиде?
Ну видимо, не для всех это очевидно.
Ну и да, называется оно "имя", а про БТ не слова )
-
mazayhin отреагировална Dmitry_4501 в [РЕШЕНО]: Как отловить кнопки пульта ДУ
В общем удалось решить проблему с кнопками пульта. Теперь приложение распознает все кнопки с пульта. Если кому-то нужно, прикрепил архив. (Delphi 10.3.1 Rio)
fmx_androidkey_fix.zip
-
mazayhin получил реакцию от Татьяна в Как узнать Device Name на Андроиде?
Это будет имя Bluetooth-адаптера.
//uses System.Bluetooth; TBluetoothManager.Current.CurrentAdapter.AdapterName
-
mazayhin получил реакцию от Barbanel в Как узнать Device Name на Андроиде?
Это будет имя Bluetooth-адаптера.
//uses System.Bluetooth; TBluetoothManager.Current.CurrentAdapter.AdapterName
-
mazayhin отреагировална msp888 в Wifi Multicast packets
Жаль, что никто не помог...
Проблему решил.
Как всегда embarcadero ничего не доводит до конца!
Обертка для мультиплатформенного сокета (TSocket) криво работает как под windows так и под android.
Для работы с Multicast-пакетами под android используйте JMulticastSocket из android api.
-
mazayhin отреагировална Евгений Корепов в Передача и прием JSON в PHP
Я бы переделал и код отправки и код приема.
При отправке вы выполняете лишние действия, проверяете наличие интернет, преобразуете json в лист.
Отправка любым способом желательна в виде "Ключ=Значение", чтоб на стороне сервера корректно распознать данные.
Вот отправка POST (добавьте в uses System.Net.Mime):
function TForm1.PostURL(const aurl, json: string): string; var AHTTPClient : THTTPClient; AHttpResponse: IHttpResponse; ASource: TMultipartFormData; begin result:= ''; AHTTPClient:= THTTPClient.Create; ASource:=TMultipartFormData.Create(); ASource.AddField('request', json); try try AHttpResponse := AHTTPClient.Post(aurl, ASource); if AHttpResponse.StatusCode <> 200 then Result := AHttpResponse.StatusText else Result := AHttpResponse.ContentAsString(); except on E: exception do ShowMessage('Ошибка сети: '+E.Message); end; finally FreeAndNil(ASource); FreeAndNil(AHTTPClient); end; end; Но гораздо проще и быстрее делать GET (добавьте в uses System.NetEncoding):
function TForm1.GetURL(const aurl, json: string): string; var AHTTPClient : THTTPClient; AHttpResponse: IHttpResponse; AEncodedJSON : String; begin result:= ''; AHTTPClient:= THTTPClient.Create; AEncodedJSON:=System.NetEncoding.TURLEncoding.URL.Encode(json); try try AHttpResponse := AHTTPClient.Get(aurl + '?request=' + AEncodedJSON); if AHttpResponse.StatusCode <> 200 then Result := AHttpResponse.StatusText else Result := AHttpResponse.ContentAsString(); except on E: exception do ShowMessage('Ошибка сети: '+E.Message); end; finally FreeAndNil(AHTTPClient); end; end; file_get_contents("php://input", "r") - это тоже вариант, но никогда такое не используйте.
На стороне сервера, в php есть специальные глобальные переменные для получения данных $_REQUEST, $_POST и $_GET.
$_POST и $_GET - для соответствующих HTTP методов. $_REQUEST - универсальный.
Вот вам код php для сервера, я там описал вспомогательную функцию лога MyLog, измените путь логов на свой.
<?php @ini_set("display_errors", "1"); error_reporting(E_ALL); //@ini_set("display_errors", "0"); error_reporting(0); function MyLog($Title, $Value = "", $Debug = false) { $LogFile = "/var/log/service/test001.log"; if (is_array($Title)) $Title = "\n".print_r($Title, true)."\n"; if (is_array($Value)) $Value = "\n".print_r($Value, true)."\n"; $Message = date("Y.m.d H:i:s")." ".$Title.$Value."\r\n"; if ($Debug) echo $Message; file_put_contents($LogFile, $Message, FILE_APPEND); } // Проверяем наличие параметра request if (!isset($_REQUEST["request"])) { echo "Нет параметров"; return; } // Декодируем строку из $_REQUEST["request"] в массив $RequesrArray = json_decode($_REQUEST["request"], true); // Проверяем прошло ли декодирование нормально if (!isset($RequesrArray)) { echo "Ошибочный JSON"; return; } MyLog('*************************************************************************************************************************'); MyLog('$_REQUEST:', $_REQUEST); MyLog('$_POST:', $_POST); MyLog('$_GET:', $_GET); MyLog('$RequesrArray:', $RequesrArray); // Работаем с массивом $RequesrArray $lessongrid_type = $RequesrArray['lessongrid_type']; $schedule0 = $RequesrArray['schedule'][0]; Обратите внимание json_decode($_REQUEST["request"], true); используется с вторым параметром true - при этом создается не объект (медленно), а ассоциативный массив (быстрее некуда).
Вот код Delphi
procedure TForm1.FormCreate(Sender: TObject); Var AURL : String; AJSON : String; begin AURL:='http://myserver.ru/api/test001.php'; AJSON:='{"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]}'; PostURL(AURL, AJSON); GetURL(AURL, AJSON); end; А вот логи на стороне сервера:
2019.06.06 13:29:13 ************************************************************************************************************************* 2019.06.06 13:29:13 $_REQUEST: Array ( [request] => {"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]} ) 2019.06.06 13:29:13 $_POST: Array ( [request] => {"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]} ) 2019.06.06 13:29:13 $_GET: Array ( ) 2019.06.06 13:29:13 $RequesrArray: Array ( [lessongrid_idpartner] => 2 [lessongrid_type] => 0 [lessongrid_idpointcity] => 1 [lessongrid_iddircourses] => 1 [lessongrid_idteacher] => 1 [schedule] => Array ( [0] => 0:00 [1] => 5:00 [2] => 0:00 [3] => 0:00 [4] => 0:00 [5] => 0:00 [6] => 0:00 ) ) 2019.06.06 13:29:13 ************************************************************************************************************************* 2019.06.06 13:29:13 $_REQUEST: Array ( [request] => {"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]} ) 2019.06.06 13:29:13 $_POST: Array ( ) 2019.06.06 13:29:13 $_GET: Array ( [request] => {"lessongrid_idpartner":2,"lessongrid_type":0,"lessongrid_idpointcity":1,"lessongrid_iddircourses":1,"lessongrid_idteacher":1,"schedule":["0:00","5:00","0:00","0:00","0:00","0:00","0:00"]} ) 2019.06.06 13:29:13 $RequesrArray: Array ( [lessongrid_idpartner] => 2 [lessongrid_type] => 0 [lessongrid_idpointcity] => 1 [lessongrid_iddircourses] => 1 [lessongrid_idteacher] => 1 [schedule] => Array ( [0] => 0:00 [1] => 5:00 [2] => 0:00 [3] => 0:00 [4] => 0:00 [5] => 0:00 [6] => 0:00 ) ) Как видите можно использовать код с $_REQUEST в обоих случаях.
Вот итоговый код php
<?php @ini_set("display_errors", "1"); error_reporting(E_ALL); //@ini_set("display_errors", "0"); error_reporting(0); // Проверяем наличие параметра request if (!isset($_REQUEST["request"])) { echo "Нет параметров"; return; } // Декодируем строку из $_REQUEST["request"] в массив $RequesrArray = json_decode($_REQUEST["request"], true); // Проверяем прошло ли декодирование нормально if (!isset($RequesrArray)) { echo "Ошибочный JSON"; return; } // Работаем с массивом $RequesrArray $lessongrid_type = $RequesrArray['lessongrid_type']; $schedule0 = $RequesrArray['schedule'][0];
-
mazayhin получил реакцию от Ingalime в Пути к ресурсам андройд
Вот статья, что куда деплоить надо, и как получить доступ к этому
http://delphifmandroid.blogspot.com/2014/02/deployment-manager.html
-
mazayhin получил реакцию от Barbanel в Пути к ресурсам андройд
Вот статья, что куда деплоить надо, и как получить доступ к этому
http://delphifmandroid.blogspot.com/2014/02/deployment-manager.html
-
mazayhin отреагировална dnekrasov в помогие код сделать рабочим в firemonkey
Не надо никак менять этот модуль. Скомпилился сразу и без ошибок (только варнинги).
Насчет Ваших ошибок - похоже Вы просто uSMBIOS и System.TypInfo в uses забыли подключить.
-
mazayhin отреагировална Tumaso в подключения PostgreSQL
как насчет воспользоваться поиском нужных файлов по своей файловой системе? например проводником или Far Manager или Total Commander или еще чем нибудь подобным...
плюс в ссылке выше есть своя ссылка на скачивание
-
mazayhin получил реакцию от Dev в Требования к целевому уровню API с августа 2018 г.
Странно, что смогли разобраться с тем, что надо заменять в папках студии, ну и подключать уже кастомное активити в манифесте.
Из DW надо подключить только пару файлов и все.
Вы в манифесте добавили эти разрешения?
И да, запрашивать у пользователя их не надо (потому, думаю, запрос и не выдает система). Для всех ваших разрешений указано Protection level: normal. Запрос нужен для тех, что dangerous.
https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_WIFI_STATE и далее по тексту
https://developer.android.com/guide/topics/permissions/overview (If your app lists normal permissions in its manifest (that is, permissions that don't pose much risk to the user's privacy or the device's operation), the system automatically grants those permissions to your app. )
-
mazayhin получил реакцию от Dev в Требования к целевому уровню API с августа 2018 г.
Ставьте целевой уровень 26 и используйте KastriFree https://github.com/DelphiWorlds/KastriFree
-
mazayhin получил реакцию от Ingalime в Конвертация JParcelable в JPendingIntent
Проверить возможности нет, но скорее всего
PIntent := JPendingIntent(Parcelable);
-
mazayhin получил реакцию от Евгений Корепов в Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию
Использовать LocationSettingsReqest, транслировав его. Но или устаревшее SettingsApi.
К сожалению нет возможности самому посмотреть и воспроизвести это все, временно нет подходящего аппарата
-
mazayhin получил реакцию от Tumaso в Как выгрузить приложение
Ну это вопросы к разработчикам системы, почему они решили что то, что пользователь закрыл, должно из памяти выгружаться системой (да, оно висит в recent, но на деле может быть выгружено - это вы видите, когда запускаете снова от туда, и все данные и состояние теряется.) JNI тут не причем.
Почитайте первоисточник (доки по андроиду от гугла, про жц активити. Оно одно, обычно, для всего приложения на делфи)
Ну и попробуйте "закрыть" тот же навигатор гугла. Что будет? - поделитесь результатом
-
mazayhin получил реакцию от Ingalime в Как выгрузить приложение
Ну это вопросы к разработчикам системы, почему они решили что то, что пользователь закрыл, должно из памяти выгружаться системой (да, оно висит в recent, но на деле может быть выгружено - это вы видите, когда запускаете снова от туда, и все данные и состояние теряется.) JNI тут не причем.
Почитайте первоисточник (доки по андроиду от гугла, про жц активити. Оно одно, обычно, для всего приложения на делфи)
Ну и попробуйте "закрыть" тот же навигатор гугла. Что будет? - поделитесь результатом
-
mazayhin отреагировална krapotkin в Рисование маркеров на определенных уровнях Zoom-a
origin насколько я помню это точка изображения, которая встанет на указанную координату
если у вас стрелочка нарисована, вы же хотите, чтобы конец стрелки указывал на нужную точку, а не пустая точка (0,0) вашей картинки
-
mazayhin получил реакцию от Ingalime в Как выгрузить приложение
Первым делом, конечно, обновиться.
Люди пишут что https://developer.android.com/reference/android/app/Activity.html#finishAndRemoveTask()
Но сам не проверял (может завтра), ну и флаг для активити в манифесте
android:autoRemoveFromRecents="true"/>
-
mazayhin получил реакцию от Barbanel в api KeyStore как реализовать в с++ Builder
Пример во вложении. Первым делом надо сделать Init.
Пример написан как попало, все надергано кусками, к сожалению.
Если кто-нибудь доведет до ума, и выложит на форум - будет замечательно!
Обратите внимание - операция CreateRSAEntry - длительная, чем больше ключ, тем дольше. В тесте после нажатия на кнопку подвиснет на пару секунд.
Шифрованные строки в примере надо смотреть в logcat. Так же для AES туда выведен вектор IV.
Преобразование в/из base64 - нативное.
KeyStore.zip
-
mazayhin получил реакцию от Ingalime в api KeyStore как реализовать в с++ Builder
Пример во вложении. Первым делом надо сделать Init.
Пример написан как попало, все надергано кусками, к сожалению.
Если кто-нибудь доведет до ума, и выложит на форум - будет замечательно!
Обратите внимание - операция CreateRSAEntry - длительная, чем больше ключ, тем дольше. В тесте после нажатия на кнопку подвиснет на пару секунд.
Шифрованные строки в примере надо смотреть в logcat. Так же для AES туда выведен вектор IV.
Преобразование в/из base64 - нативное.
KeyStore.zip
-
mazayhin получил реакцию от Ingalime в api KeyStore как реализовать в с++ Builder
Ок! А если кто нибудь листнер на java для сканера отпечатков напишет, что б колбэк в делфи прокинуть, то покажу и работу со сканером....
-
mazayhin получил реакцию от Ingalime в api KeyStore как реализовать в с++ Builder
Я могу отправить пример работы с кейстором, и шифрование/расшифровка на симметричном и асимметричном ключах из стора, но он для делфи. Вроде, к билдеру можно подключить. Разберетесь?
-
mazayhin получил реакцию от Женя в api KeyStore как реализовать в с++ Builder
Я могу отправить пример работы с кейстором, и шифрование/расшифровка на симметричном и асимметричном ключах из стора, но он для делфи. Вроде, к билдеру можно подключить. Разберетесь?
-
mazayhin получил реакцию от Barbanel в api KeyStore как реализовать в с++ Builder
Ок! А если кто нибудь листнер на java для сканера отпечатков напишет, что б колбэк в делфи прокинуть, то покажу и работу со сканером....