-
Постов
163 -
Зарегистрирован
-
Посещение
-
Победитель дней
19
Сообщения, опубликованные mazayhin
-
-
5 часов назад, Martifan сказал:
можете дать премию ссылку?
В ЛС можно спросить, может он довел до ума и выложит сюда.
То что я делал выкладывать в общий доступ - стыдно, а приводить в нормальный вид - некогда.
-
7 часов назад, Martifan сказал:
это маленькая приложения который отправляет запросы от клиента серверу о том что клиентский телефон включен и сколько процент батареи, ничего особенного просто удивился такое странное поведения клиента и подумал может кто то столкнулся таким же проблемой
То есть команда:
IOHandler.WriteLn(ObjectToJson(ASentObject), IndyTextEncoding_UTF8);
работал фоновом режиме (когда экран отключен)
У @Rusland есть решение с фореграунд-сервисом
-
14 минут назад, msccenter сказал:
А если до подключения проверить, существует ли файл на устройстве?
if TFile.Exists(TPath.Combine(TPath.GetDocumentsPath, 'libfbclient.so.2.5.8)) then showmessage('Exists')
-
-
-
1 час назад, msccenter сказал:
Добрый день!
У меня вот не получается установить подключение к серверу Firebird через приложение Android.
Я разместил файл libfbclient.so.2.5.8 в папке assets\internal, в меню Project - Deployment указал путь сначала так:
Потом сделал через кнопку так:
В самом проекте у меня есть DataModule, в котором есть IBConnection из библиотеки IBDac от Devart.
Путь к библиотеке я прописал в FormCreate этого модуля так:
Когда пробую подключиться к моему удаленному серверу по IP адресу, то получаю ошибку:
Cannot load client library: /data/user/0/com.embarcadero.msccMobile/files/libfbclient.so.2.5.8.
Что я делаю не так? Как мне сделать, чтобы подключалось нормально?
Прошу помочь, только второй день работаю с этим направлением.
Скорее всего, файл не деплоится.
Уберите библиотеку из \Android\Release\.... и поместите ее в другое место, к примеру, в корень проекта.
Заново добавьте в Deployment
-
17 часов назад, Aleks133 сказал:
Всем добрый день. Как в сделать развертывание файлов(например ini или картинки) по адресу:
/storage/emulated/0/MyFolder/123.ini или 123.jpg (т.е. корень внутренней памяти/моя папка/мой файл)
пробовал в deployment указать такой путь, но файл не появился.
и как мне потом с ним работать?какой путь к нему указывать? например так
image1.Bitmap.LoadFromFile(system.iOUtils.TPath.Combine
(system.iOUtils.TPath.??????????,'MyFolder/123.jpg'));Или как-то иначе?
Может нужно вообще как-то по другому все это делать?
Заранее благодарен.
Вот статья, что куда деплоить надо, и как получить доступ к этому
http://delphifmandroid.blogspot.com/2014/02/deployment-manager.html
-
18 часов назад, лёля сказал:
Тут код получения параметров из биоса.
Что именно то не работает?
Вроде, там нет ничего такого, с vcl связанного
-
В 16.04.2019 в 15:20, Dev сказал:
если мы в коде укажем что нужно получить разрешение, то приложение будет его запрашивать даже если оно разрешено по умолчанию андроидом
Хм, по умолчанию не разрешено ничего такого особого, кроме как запуститься. Все выставляется в манифесте и разрешения даются при установке (напр. доступ в интернет). Не разу не видел такого, что бы что-то запрашивало разрешение на то, что можно, указанное в манифесте (да то же интернет). Но увы, возможности проверить нет. И да, все что вы хотите, в манифесте все равно должно быть.
В 16.04.2019 в 15:20, Dev сказал:Вы правы, для ACCESS_WIFI_STATE, CHANGE_WIFI_STATE, CHANGE_WIFI_MULTICAST_STATE не нужны разрешения начиная с Андроид 6, но функции Wifi работать не будут, даже если запросить разрешения у пользователя и он их разрешит
мне кажется, что вы сам себе противоречите? Хотите использовать WifiManager, разрешения все равно надо запросить, но только при установке - возвращаемся к манифесту.
Ну а что бы уследить за изменениями, что надо, а что не надо, это уже на https://developer.android.com все ведь меняется. Указали поддержку более позднего API, извольте соответствовать этому, но и не забывать про старое...
-
В 06.04.2019 в 21:00, Dev сказал:
немного разобрался, попробовал demo по это ссылке, оригинал работает, но когда начал со своими разрешениями запускать, программа вылетает при нажатии на кнопку, для меня показалось этот вариант очень тяжелым.
нашел другой https://github.com/CarlosHe/AndroidPermission
здесь все понятно расписано что куда разложить по папкам и сам код примера более прозрачный для моих знаний.
но опять загвоздка, нет тех разрешений которые мне нужны в файле FMX.Permissions.Android.pasACCESS_WIFI_STATE
CHANGE_WIFI_STATE
CHANGE_WIFI_MULTICAST_STATE
есть только эти:
TAndroidPermission = (apREAD_CALENDAR, apWRITE_CALENDAR, apCAMERA, apCONTACTS, apREAD_CONTACTS, apWRITE_CONTACTS, apGET_ACCOUNTS, apLOCATION, apACCESS_FINE_LOCATION, apACCESS_COARSE_LOCATION, apMICROPHONE, apRECORD_AUDIO, apPHONE, apREAD_PHONE_STATE, apREAD_PHONE_NUMBERS, apCALL_PHONE, apANSWER_PHONE_CALLS, apREAD_CALL_LOG, apWRITE_CALL_LOG, apADD_VOICEMAIL, apUSE_SIP, apPROCESS_OUTGOING_CALLS, apSENSORS, apBODY_SENSORS, apSMS, apSEND_SMS, apRECEIVE_SMS, apREAD_SMS, apRECEIVE_WAP_PUSH, apRECEIVE_MMS, apSTORAGE, apREAD_EXTERNAL_STORAGE, apWRITE_EXTERNAL_STORAGE);
я добавил в этот файл свои, приложение собирается, но при нажатии на кнопку не реагирует, не вылазит окно с запросом разрешения.
поковырялся и нашел в папке Lib Студии эти два файла, FMX.Permissions.Android.dcu, FMX.Permissions.Android.o. открыл их в блокноте и обнаружил что там есть перечисленные разрешения которые есть pas файле.
Можно как то изготовить эти два файла уже с моими добавленными разрешениями на основе этого FMX.Permissions.Android.файла? или это вобще бред, выкинуть все с головы и не тратить времяСтранно, что смогли разобраться с тем, что надо заменять в папках студии, ну и подключать уже кастомное активити в манифесте.
Из 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. )
-
В 03.04.2019 в 16:51, Dev сказал:
В приложении нужен доступ к WiFi, соответственно используются разрешения Access WiFi State, Change wifi multicast state, Change wifi state.
Tokyo 10.2.3.
В шаблон AndroidManifest.template.xml: вставляю эту строку <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="26" />, поскольку в конечном итоге приложение нужно разместить в play market, но с этой строкой после запуска приложение никак не реагирует на функции связанные с Wifi, если оставляю строку по умолчанию <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />, то всё работает.
В Rio вроде из коробки target 26, но для Rio еще не завезли компонент который используется в приложении и неизвестно когда будет.
Понимаю что это связанно с новыми правилами разрешений, но может есть какой-то способ заставить работать в Tokyo со строкой обманкой targetSdkVersion="26" ?Ставьте целевой уровень 26 и используйте KastriFree https://github.com/DelphiWorlds/KastriFree
-
13 часов назад, serser сказал:
Получается Segmentation fault
PIntent на момент присваивания = nil
И это явно не простое присваивание, потому что во время него 10 раз в логе пишется switching thread, потом появляется эксепшн.
Передаю интент в сервис так:
class procedure TssAndroidServiceHelper.StartService(const AServiceName: string; AIntent: JIntent); var PendingIntent: JPendingIntent; begin PendingIntent := TAndroidHelper.Activity.createPendingResult(1, AIntent, 0); AIntent.setClassName(TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString(AServiceName)); AIntent.putExtra(StringToJString('q'), JParcelable(PendingIntent)); TAndroidHelper.Activity.startService(AIntent); end;
Получаю так:
TDM = class(TAndroidService) function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; procedure AndroidServiceCreate(Sender: TObject); private FPIntent: JPendingIntent; FStr: string; FThread: TssThread; procedure StartThread; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; var ResultIntent: JIntent; Parcelable: JParcelable; begin Parcelable := Intent.getParcelableExtra(StringToJString('q')); FPIntent := JPendingIntent(Parcelable); ResultIntent := TJIntent.Create; ResultIntent.putExtra(StringToJString('res'), StringToJString('content')); FPIntent.send(TAndroidHelper.Context, 7, ResultIntent); Result := TJService.JavaClass.START_STICKY; end;
Есть еще идеи как вытащить отложенное намерение?
Опять же, повторюсь, нет возможности проверить, и особо времени нет вникнуть. Только, кажется, все немного усложнили вы себе с этой посылкой.
У PendingIntent есть метод
readPendingIntentOrNullFromParcel(Parcel in)
который как раз вычитывает его из посылки.Напрямую да, не получится привести их.
-
59 минут назад, serser сказал:
Помогите достать JPendingIntent из JIntent.
Пытаюсь из сервиса получить отложенный интент, созданный с помощью TAndroidHelper.Activity.createPendingResult.
Делаю так:
var
Parcel: JParcelable;
PIntent: JPendingIntent;begin
Parcelable := Intent.getParcelableExtra(StringToJString('pendingintent'));
PIntent := Parcelable ;
...
end;
Получается ошибка:
E2010 Incompatible types: 'JPendingIntent' and 'JParcelable'
Как приводить эти интерфейсы друг к другу?
Проверить возможности нет, но скорее всего
PIntent := JPendingIntent(Parcelable);
-
2 часа назад, Евгений Корепов сказал:
Кстати в каком то приложении видел что по кнопке открываются настройки приложений - удобно, но как интересно это сделать?
Использовать LocationSettingsReqest, транслировав его. Но или устаревшее SettingsApi.
К сожалению нет возможности самому посмотреть и воспроизвести это все, временно нет подходящего аппарата
-
6 часов назад, Heinrich сказал:
Это очень странно как раз. Если вы выгрузили приложение, то почему оно висит в процессах и жрёт тем самым ресурсы? Закрыть приложение - да это более чем стандартное поведение для пользователя той или иной программы. Delphi использует Android NDK, стало быть в нём нет таких возможностей?
Ну это вопросы к разработчикам системы, почему они решили что то, что пользователь закрыл, должно из памяти выгружаться системой (да, оно висит в recent, но на деле может быть выгружено - это вы видите, когда запускаете снова от туда, и все данные и состояние теряется.) JNI тут не причем.
Почитайте первоисточник (доки по андроиду от гугла, про жц активити. Оно одно, обычно, для всего приложения на делфи)
Ну и попробуйте "закрыть" тот же навигатор гугла. Что будет? - поделитесь результатом
-
3 часа назад, Heinrich сказал:
Здравствуйте.
Вопрос такой, как выгрузить приложение из памяти? При вызове Close приложение просто сворачивается и при нажатии на кнопку отображения приложений каскадно оно по прежнему видно и к нему можно вернуться.
MainActivity.finish; не помогает. Приложение не выгружается. Halt(0) сворачивает приложение несколько по иному, но оно всё равно остаётся в процессах висеть. При чём, когда его вызываешь, происходит его перезапуск. Очищаются се данные. которым оно обладало после работы. Так же не понятно, как убрать при старте временно появляющиеся изображение этого самого огонька (факела). Я указал свои изображения во всех разрешениях (Launcher Icon) и (Splash Image) в виде PNG необходимого разрешения и эти изображения легли в финальный APK, как и положено, и в программах моя программа имеет правильную и конку, но при старте проскакивает этот факел и потом приложение запускается. Отключение галки Include Splash Image ничего не меняет. Работаю в RAD XE8 Delphi. Проверяю на адндроид устройстве с версией ОС 7.
Кто со всем этим сталкивался и как поборол?
Первым делом, конечно, обновиться.
Люди пишут что https://developer.android.com/reference/android/app/Activity.html#finishAndRemoveTask()
Но сам не проверял (может завтра), ну и флаг для активити в манифесте
android:autoRemoveFromRecents="true"/>
-
Пример во вложении. Первым делом надо сделать Init.
Пример написан как попало, все надергано кусками, к сожалению.
Если кто-нибудь доведет до ума, и выложит на форум - будет замечательно!
Обратите внимание - операция CreateRSAEntry - длительная, чем больше ключ, тем дольше. В тесте после нажатия на кнопку подвиснет на пару секунд.
Шифрованные строки в примере надо смотреть в logcat. Так же для AES туда выведен вектор IV.
Преобразование в/из base64 - нативное.
-
-
В 27.02.2019 в 07:13, Женя сказал:
В визуал студии в Xamarin есть такой класс -Java.Security.KeyStore Class, этот класс(как я понял) отвечает за подключение к хранилищу ключей андроида,короче говоря Android keystore system .
А вот как достучаться до этой функции в с++builder ?Я хочу сделать привязку приложения через Android keystore system ,а как это сделать в Rad студии не знаю
Я могу отправить пример работы с кейстором, и шифрование/расшифровка на симметричном и асимметричном ключах из стора, но он для делфи. Вроде, к билдеру можно подключить. Разберетесь?
-
По идее да. Разбирайтесь
Все что было связано с изначальным вопросом я дал, работайте как в АС, от fmx по части работы с сенсором нет ничего, те же результаты получите и в АС
-
через Api можно сделать, к примеру, так:
var JObj: JObject; WindowManager: JWindowManager; Rotation: Integer; begin JObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.WINDOW_SERVICE); WindowManager := TJWindowManager.Wrap((JObj as ILocalObject).GetObjectID); Rotation := WindowManager.getDefaultDisplay.getRotation; if Rotation = TJSurface.JavaClass.ROTATION_180 then begin end else if Rotation = TJSurface.JavaClass.ROTATION_270 then begin end else if Rotation = TJSurface.JavaClass.ROTATION_90 then begin end;
Подключать ничего не надо, Androidapi.JNI.GraphicsContentViewText (в нашем случае) уже подключен
-
3 минуты назад, Bob32 сказал:
я все так и понял )
еще вопрос - хелп пишет, что состояния InvertedPortrait и InvertedLandscape - under IOS.
типа что под андроидом будет только Portrait и Landscape
вы пробовали под андроидом с ними работать - они будут "срабатывать"?
(это у нас 180 и 270)
Вот этого не скажу. Можно попробовать и посмотреть. Если не даст то уже из api брать
-
Посмотрите про RotationMatrix в https://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], float[], float[], float[])
Там описано, что это и откуда "берется"
-
3 минуты назад, Bob32 сказал:
СПАСИБО! )
а "получаете углы" - имеется ввиду углы наклона телефона из IFMXScreenService.GetScreenOrientation - верно?
те - этот код нужно вставить между getRotationMatrix и getOrientation
и getOrientation передавать OutMatrix вместо FMatrix, как сейчас. так?
Немного не то имел ввиду.
GetScreenOrientation не даст никаких углов, он укажет, грубо говоря, куда направлен верх телефона (где камера). Portrait = 0градусов, вверх.
remapCoordinateSystem нужен как раз для того, что бы пересчитать матрицу в соответствии с изменившимся положением устройства на осях (верно ведь?).
Если оси не изменились, смысла в лишней работе телефона нет, ровно как и в создании OutMatrix (его надо обязательно создать и задать размер).
Как поступить - решать вам. Или считать дополнительно каждый раз, или только по необходимости.
Как узнать Device Name на Андроиде?
в Android
Опубликовано
Это будет имя Bluetooth-адаптера.
//uses System.Bluetooth; TBluetoothManager.Current.CurrentAdapter.AdapterName