
TMapsEngine
Автор
Равиль Зарипов (ZuBy), в Android
-
Похожий контент
-
От Женя
В визуал студии в Xamarin есть такой класс -Java.Security.KeyStore Class, этот класс(как я понял) отвечает за подключение к хранилищу ключей андроида,короче говоря Android keystore system .
А вот как достучаться до этой функции в с++builder ?Я хочу сделать привязку приложения через Android keystore system ,а как это сделать в Rad студии не знаю
-
От Mohamed BEN AMMAR
hello
i'm using delphi fmx for building android App
i have this code for Activating The WI-FI icon from android device:
This could be found here .
=========== code ==================
uses
Androidapi.Helpers,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNIBridge,
Androidapi.JNI.WifiManager;
procedure SetWifiEnabled (AEnable: Boolean); var Obj: JObject; WifiManager: JWifiManager; begin Obj: = SharedActivityContext.getSystemService (TJContext.JavaClass.WIFI_SERVICE); if Obj = nil then Exit; WifiManager: = TJWifiManager.Wrap ((Obj as ILocalObject) .GetObjectID); WifiManager.setWifiEnabled (AEnable); end;
My question is About Activating Android location:
Is it possible to activate the service location icon from android device
programatically without using the Location or TLocationSensor component ....?
however I know exactly that google has been Deactivate this API since android "4" just for security reasons .....
but i have seen many apps in playstore can activate the service without using
this code here ask the user for activate the location manually .... procedure TForm1.GPSSettings; {$IFDEF ANDROID} var Intent: JIntent; {$ENDIF} begin {$IFDEF ANDROID} Intent := TJIntent.Create; Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS); TAndroidHelper.Activity.startActivity(Intent); {$ENDIF} end; in other versions like lolipopup can show just the Allow Permission system dialog timer ....( Asking the user for Allowing this App to Activate the service location ......)
I have an android device with lolipopup version and i try to execute the location EMBARCADERO sample but
this one can not activate the service location ICON even my device show me the Allow permission dialog where i choose yes allow
with never ASK....
Finally , I like the WI-FI code above .....
and i'm wondering if someone here can do this task for me (i need a unit as the WI-FI code above which can offer me
the option to activate the Service Location ICON )
I'm ready to paid for that task .....
Sincerelly: Brave.
-
От Денис Демин
Здравствуйте, есть такая задача:
1) Необходимо вставить карту от Яндекса на форму.
2) Необходимо вставить информацию текстовую (информация о доставке или оплате), это можно также вставить HTML кодом, а лучше просто отформатированным содержанием.
Заранее спасибо всем за ответы.
-
От AliZairov
Здравствуйте. Кто-нибудь использует схему instagram api? Dev instagram Хотя я и сделал эксперименты, результат, к сожалению, не очень хороший.
function getCode: string; begin FRequest.Method := TRESTRequestMethod.rmGET; FRequest.Resource := '/oauth/authorize/'; FRequest.AddParameter('client_id', client_id, TRESTRequestParameterKind.pkGETorPOST); FRequest.AddParameter('redirect_uri', URIEncode(redirect_uri), TRESTRequestParameterKind.pkGETorPOST); FRequest.AddParameter('response_type', 'code', TRESTRequestParameterKind.pkGETorPOST); FRequest.Execute; FRequest.Response.GetSimpleValue('code', Result); end; Проблема заключается в перенаправленном URL-адресе.
http://your-redirect-uri?code=CODE
-
От AliZairov
Привет. Я сделал новую версию YouTubeApi компоненты. Поддерживаемые VCL & FMX + Mobile.
Никаких официальных YouTube Api компоненты. Только данные с парсинг. Пример доступен в архиве.
Новый
===
v1.4 - 25/02/2018
+ Устранение проблем
YouTubeApiDelphi
-
От FREEFAR
Доброе время суток!
Раньше все манипуляции с отображением геолокации и картами делал непосредственно в WebBrowser через api yandex.
Сейчас обратил внимание на TmapView но ума не приложу как в нем построить маршрут между двумя и более точками? Направьте пжл ибо в интернете инфо не вижу... И возможно ли вообще это? Видео от ZuBy смотрел но не разобрался с его компонентой ибо не особо силен... Буду очень признателен. Может где пример есть подобной реализации , думаю сам допру дальше
-
От ivadimos
Пытаюсь опубликовать приложение в Гугл маркет.
Присылают ответ на почту.
OpenSSL
The vulnerabilities were addressed in OpenSSL 1.02f/1.01r. To confirm your OpenSSL version, you can do a grep search for:
$ unzip -p YourApp.apk | strings | grep "OpenSSL"
You can find more information and next steps in this Google Help Center article.
Но ведь я не использую никакой работы с сетью и т.д, только firedac и sqlite
-
От Равиль Зарипов (ZuBy)
Доброго времени суток!
Навеяно этой темой.
Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас.
Решил собрать аналогичный пример, только не использовать TREST***
немного опишу, свою реализацию
uAppSettings.pas - хранит описание вашего приложения созданного в ВК FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст
var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы
var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется
GitHub TRESTLight.zip
-
От Pax Beach
Я реализовал пример работы с микрофоном и таймером в Android сервисе, как указано в теме вопроса.
Каждый раз, когда вы отправляете в сервис StartCommand или сервис перезапускается, включается запись с микрофона, и сохраняется в каталог с музыков в файл "myrecord.3gp".
Надеюсь, мой пример поможет вам создать новые полезные решения. В этом случае пожалуйста делитесь ими с участниками нашего сообщества.
Для отладки своих программ на Android используйте запись в LOGI и чтение при помощи monitor.bat (PlatformSDKs\android-sdk-windows\tools).
uses ... AndroidApi.JNI.Media, // JMediaRecorder AndroidApi.Timer, // Timer ...; Const TimerInterval = 1000; TimerCounterSecLimit = 10; type TDM = class(TAndroidService) ... private FTimerHandle: Integer; FRecording: Boolean; procedure StartRecord; procedure StopRecord; procedure StartTimer; procedure StopTimer; public FAudioRec: JMediaRecorder; end; procedure Log(const Fmt: string; const Params: array of const); overload; var Msg: string; M: TMarshaller; begin Msg := Format(Fmt, Params); LOGI(M.AsUtf8(Msg).ToPointer); end; procedure Log(const Source: string); overload; var M: TMarshaller; begin LOGI(M.AsUtf8(Source).ToPointer); end; procedure TDM.AndroidServiceCreate(Sender: TObject); begin FTimerHandle := 0; FTimerCounter := 0; FRecording := false; end; procedure TDM.AndroidServiceDestroy(Sender: TObject); begin StopTimer; StopRecord; end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopIntent')) then begin StopTimer; StopRecord; Result := TJService.JavaClass.START_NOT_STICKY; // don't reload service Log('- service stoped', []); end else begin if not FRecording then begin Log('... sound record to be started', []); StartRecord; StartTimer; end; Result := TJService.JavaClass.START_STICKY; // rerun service if it stops Log('+ Service started', []); end; end; procedure TDM.StartRecord; begin StopRecord; FAudioRec := TJMediaRecorder.Create; FAudioRec.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC); FAudioRec.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.THREE_GPP); FAudioRec.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.AMR_NB); FAudioRec.setOutputFile(StringToJString(TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp'))); try FAudioRec.Prepare(); FAudioRec.start; FRecording := True; Log('+ Start record to %s', [TPath.Combine(TPath.GetSharedMusicPath, 'myrecord.3gp')]); except on E: Exception do Log('- Error in mic recording: %s', [E.Message]); end; end; procedure TDM.StopRecord; begin if Assigned(FAudioRec) then begin if FRecording then begin FRecording := false; try FAudioRec.stop(); FAudioRec.release(); Log('- Mic recording is stoped'); except on E: Exception do Log('- Error in mic stop recording: %s', [E.Message]); end; end; end else begin FRecording := false; end; end; procedure TDM.WaitComplete(TimerId: Integer); begin if FTimerCounter < TimerCounterSecLimit then begin Log('+++ Timer is triggered %d time.', [FTimerCounter]); inc(FTimerCounter); end else StopTimer; end; procedure TDM.StartTimer; begin FTimerCounter := 0; if FTimerHandle = 0 then begin FTimerHandle := AndroidTimerCreate; AndroidTimerSetInterval(FTimerHandle, TimerInterval); end; AndroidTimerSetHandler(WaitComplete); Log('+ Timer started', []); end; procedure TDM.StopTimer; begin if FTimerHandle > 0 then begin Log('... MIC recording to be stopped'); StopRecord; AndroidTimerSetHandler(nil); Log('- Timer stoped', []); end; end; end.
-
От magicxor
Добрый день.
Как использовать API WindowsRT для шифрования? (https://msdn.microsoft.com/en-us/library/windows/apps/windows.security.cryptography.core.aspx)
Конкретно - интересует RSA, генерация пары ключей, импорт/экспорт в файл, шифрование и дешифрование строки.
Для начала я пытаюсь просто получить названия алгоритмов шифрования, чтоб потом их использовать. Даже не возвращаю их пока из функции, просто получаю:
uses System.Threading, System.Types, System.Win.ComObj, Winapi.Security.Cryptography, Winapi.Foundation, Winapi.Foundation.Collections, Winapi.Storage.Streams, Winapi.CommonTypes, Winapi.Foundation.Types, Winapi.Winrt, System.Win.Winrt; procedure TForm1.Button1Click(Sender: TObject); var AsymmetricAlgoNames: Core_IAsymmetricAlgorithmNamesStatics; AsymmetricAlgoNamesInsp: IInspectable; GetAlgoNames: IFuture<boolean>; begin GetAlgoNames := TTask.Future<boolean>( function: boolean begin OleCheck(RoInitialize(RO_INIT_MULTITHREADED)); try OleCheck(RoGetActivationFactory(TWindowsString(SCore_AsymmetricAlgorithmNames), Core_IAsymmetricAlgorithmNamesStatics, AsymmetricAlgoNamesInsp)); AsymmetricAlgoNames := AsymmetricAlgoNamesInsp as Core_IAsymmetricAlgorithmNamesStatics; finally RoUninitialize; end; Result := true; end); GetAlgoNames.Start; end;
После нажатия на кнопку:
И сразу:
Но иногда (рандомно) вместо первого исключения получаю:
IFuture использую потому что если это делать в потоке гуя, при вызове RoInitialize ругается, что поток уже запущен и нельзя изменить его состояние.
Delphi 10 Seattle, Windows 10 x64.
-
-
Последние посетители 0 пользователей онлайн
Ни одного зарегистрированного пользователя не просматривает данную страницу