- 0
-
Похожий контент
-
От Евгений Корепов
Для одного своего проекта сделал, поделюсь, вдруг кому пригодится. Тестировал под Windows и Android.
Для использования просто добавьте BitmapAsyncLoader в uses, а дальше все просто:
ImageControl.Bitmap.LoadFromURLAsync('https://bipbap.ru/wp-content/uploads/2017/10/0_8eb56_842bba74_XL-640x400.jpg'); Код юнита хелпера:
unit BitmapAsyncLoader; interface uses FMX.Graphics, System.Net.HttpClient, System.Types, System.Classes; type TBitmapAsyncLoader = class helper for TBitmap procedure LoadFromUrlAsync(const AUrl : String); end; implementation var AHTTPClient : THTTPClient; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then TThread.Synchronize(Nil, procedure begin try Self.LoadFromStream(AHTTPResponse.ContentStream); except end; end ); end, AURL ); except end; end; initialization AHTTPClient:=THTTPClient.Create; finalization if Assigned(AHTTPClient) then begin AHTTPClient.DisposeOf; end; end. Архив с тестовым проектом прилагаю.
BitmapAsyncLoader.7z
-
От A. Sharif
Возможно ли с помощью intent получить от какого-либо из официальных приложений Вконтакте/Фейсбук/Инст/Google access-token (через кол-бэк метод)?
Предусматривается ли данная возможность этими приложениями? Если кто делал - приведите, пожалуйста, пример получения результата.
-
От Wovan2
Здравствуйте.
Пишу на Delphi 7. И все было нормально пока не у нас не появился терминал сбора данных на Androide. На Delphi 10 написал простенькое приложение. Но тут встала проблема с занесением данных в поле ввода со сканера штрихкода. В инете нашел, что это дело просто решается интентами. Вообще в windows я подобное делал: вешал процесс, следящий за com-портом, и при появлении данных на нем пересылал их куда надо. В Android должно быть не сложнее. Но я запутался во всей этой куче параметров и функций, передаваемых и получаемых "намерениями".
В общем вот что мы имеем на данный момент.
В настройках сканера прописано:
Intent output - android.intent.ACTION_DECODE_DATA Intent string extra - barcode_string На просторах нашел запуск BroadcastReceiver.
На событие получения сообщения повесил
ed.Text := JStringToString(csIntent.getExtras.getString(TJIntent.JavaClass.EXTRA_INTENT)); где csIntent параметр из BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); Но ничего не выходит.
Я подозреваю, что данные из сканера где-то в структуре csIntent. Но, к сожалению, в отладке дальше адреса этой переменной пробраться не получилось.
Причем строка ed.Text := JStringToString(csIntent.getAction); возвращает в Text название интента: "android.intent.ACTION_DECODE_DATA".
Помогите разобраться со структурой JIntent. Спасибо.
-
От x11
Нет ли у FMX готовой функции для открытия веб-ссылок из приложения?
А то приходится городить огород с лисапетами и кучей IFDEF.
В итоге что у меня получилось.
Для удобства разнес все по разным модулям.
Модуль для Windiws
unit uUtilsWindows; interface {$IFDEF MSWINDOWS} uses ShellApi, Variants, Windows, FMX.Types, FMX.Platform.Win; procedure WindowsOpenUrl(const sUrl: string; WindowHandle: TWindowHandle); {$ENDIF} implementation {$IFDEF MSWINDOWS} procedure WindowsOpenUrl(const sUrl: string; WindowHandle: TWindowHandle); begin ShellExecute(FmxHandleToHWND(WindowHandle), 'open', PChar(VarToStr(sURL)), nil, nil, SW_NORMAL); end; {$ENDIF} end.
Модуль для Android
unit uUtilsAndroid; interface {$IFDEF ANDROID} uses FMX.Helpers.Android, Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewText, AndroidApi.Helpers; procedure AndroidOpenUrl(const sUrl: string); {$ENDIF} implementation {$IFDEF ANDROID} procedure AndroidOpenUrl(const sUrl: string); Var Uri: Jnet_Uri; OpenLinkIntent: JIntent; begin Uri := StrToJURI(sUrl); OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri);// будем что-то смотреть OpenLinkIntent.addCategory(TJIntent.JavaClass.CATEGORY_BROWSABLE);// смотреть в браузере OpenLinkIntent.setData(Uri);// смотреть эту ссылку SharedActivity.startActivity(OpenLinkIntent);// открываем end; {$ENDIF} end.
теперь в основной форме:
uses ..., ...{$IFDEF ANDROID}, vkbdhelper, uUtilsAndroid{$ENDIF} {$IFDEF MSWINDOWS}, uUtilsWindows {$ENDIF}; ... ... ... procedure TfmEditObject.actOpenUrlExecute(Sender: TObject); begin {$IFDEF ANDROID}AndroidOpenUrl(edMapsCoordUrl.Text);{$ENDIF} {$IFDEF MSWINDOWS}WindowsOpenUrl(edMapsCoordUrl.Text, Self.Handle);{$ENDIF} end;
А если добавлять ещё одну платформу, то ещё один модуль понадобится.
Может есть более правильный вариант, так сказать, дизайна исходного кода?
-
От Rustam Bikeev
Здравствуйте. Пришла беда откуда не ждал, Delphi 10.2 не знает библиотеки androidapi.... FMX.Helpers.... и тд и тп. И никак не получается их установить, либо я тупой либо я даже незнаю что может быть. фалы *.dcu лежат в папке ...\lib\android\release.
Помогите решить проблему очень нужно использовать намерения. уже и переустанавливал платформу android не помогает.
-
От AlexShaman
procedure TfMain.PhotoClick(Sender: TObject); var sPath,FLastPhotoName:string; {$IF DEFINED(ANDROID)} PhotoIntent: JIntent; photoUri: Jnet_Uri; JFileName: JFile; {$ENDIF} begin {$IF DEFINED(ANDROID)} FLastPhotoName := ''; FLastPhotoFullName := ''; FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage); PhotoIntent := TJIntent.JavaClass.init(TJMediaStore.JavaClass.ACTION_IMAGE_CAPTURE); if (PhotoIntent.resolveActivity(TAndroidHelper.Context.getPackageManager()) <> nil) then begin FLastPhotoName := THashMD5.GetHashString('JPEG PHOTO FILE ' + DateTimeToStr(Now)) + '.jpg'; FLastPhotoFullName := TPath.Combine(TPath.GetSharedDocumentsPath, FLastPhotoName); JFileName := TJFile.JavaClass.init(StringToJString(FLastPhotoFullName)); photoUri := TJnet_Uri.JavaClass.fromFile(JFileName); PhotoIntent.putExtra(TJMediaStore.JavaClass.EXTRA_OUTPUT, TJParcelable.Wrap((photoUri as ILocalObject).GetObjectID)); if PhotoIntent.resolveActivity(TAndroidHelper.Activity.getPackageManager) <> nil then TAndroidHelper.Activity.startActivityForResult(PhotoIntent, REQUEST_IMAGE_CAPTURE); end; {$ENDIF}
Приложение камеры открывается, фото делается, но при закрытии приложение вылетает
В логах ошибки
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.embarcadero.test/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.NullPointerException
-
От ENERGY
Подскажите пожалуйста как определить что программа запустилась из AlarmManager?
Я сделал это так, по аналогии с http://stackoverflow.com/questions/6751564/how-to-pass-a-boolean-between-intents
В Java коде, который компилиться в итоге в classes.dex (с XE7 не нужен DEX файл, можно подключить Jar файл сразу к проекту!), добавил строчку
public class AlarmReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Intent TestLauncher = new Intent();
TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity");
TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TestLauncher.putExtra("StartedFromAM", true);
context.startActivity(TestLauncher);
}
}
По идее теперь при старте из AlarmManager, должно быть true в активити.
Из Delphi пытаюсь получить это значение, но всегда возвращает false (0).
ShowMessage(SharedActivity.getIntent.getBooleanExtra(StringToJString('StartedFromAM'), false).ToString );
И вот так тоже:
ShowMessage ( MainActivity.getIntent.getBooleanExtra(StringToJString('StartedFromAM'), false).ToString);
Не подскажете в чем может быть проблема?
-
От Pax Beach
В Android 6 на Berlin 10.1.1 перестала работать стандартная функция TakePhotoFromCameraAction.
Иногда работает, иногда нет.
Поэтому я решил написать нативную замену этой функции. За основу взят пример с портала разработчиков Android.
Мой пример про видео на базе отправки Intetn смартфону и получение результата в виде другого Intent, отлично работает.
Но для фотографий этот пример сыпется, после выполнения фотографирования система возвращается в мое приложение и оно вылетает с ошибкой:
Если заглянуть в исходнки, там все обвязано сообщениями в лог монитора. Последнее сообщение «+ Intent is sent».
Помогите пожалуйста разобраться, в чем может быть проблема?
PhotoIntent.zip
-
От Pax Beach
Знающие люди, подскажите пожалуйста, как в iOS одно приложение может запустить другое приложение, как передать картинку в другое приложение, готовое его принять, как при запуске обрабатывать в своем приложении параметры, переданные из другого приложения?
В Android для этого есть механизм Intent Filter, а как это устроено в iOS, и как с этим работать в RAD Studio?
-
От Pax Beach
Я хочу запустить приложение из другого приложения под iOS и под Android. В зависимости от переданного параметра, который я хочу получить в главной форме, будет открываться соответствующая стартовому параметру форма (Activity в Android).
Пример: Из приложения "Папа" запустить приложение "Дочка", при этом сообщив "Помой посуду!". И чтобы приложение "Дочка" сообщила "Хорошо, папа" и открыло форму "Мойка посуды". ))) Как ее решить на разных платформах?
В Windows это делается запуском приложения с соответствующими параметрами, в зависимости от их значения из проекта или главной формы открывается нужная форма.
В Android для этого сделаны Intent фильтры. Только не понятно, как их обрабатывать в приложениях, написанных в Delphi. Вот как вы это сделали бы?
И как такое делается в приложениях под iOS, естественно, тоже написанных на Delphi или С++.
UPD 14-09-2016:
Для Android решение найдено.
Осталось найти решение для iOS.
-
-
Последние посетители 0 пользователей онлайн
Ни одного зарегистрированного пользователя не просматривает данную страницу
Доброго времени суток подскажите пожалуйста как мне получить ссылку из браузера запущенного через intent в общем суть такова:
1 запускаю браузер через интент с сылкой http://fire-monkey.ru
2 на ссылке происходит редирект
3 я попадаю на http://fire-monkey.ru/forum/
Как получить последнюю ссылку после редиректа? в данном случае она равна http://fire-monkey.ru/forum/
var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setData(StrToJURI('http://fire-monkey.ru')); SharedActivity.startActivity(Intent); end;
Поделиться сообщением
Ссылка на сообщение