• 0
Авторизация  
ENERGY

Как вызвать что-нибудь из Android API? Объясните пошагово

Вопросы

Привет.

Про программировании в Windows, использовать Windows API просто -

1. Открываем MSDN, находим нужную функцию.  Смотрим из какой она DLL.

2. Затем портируем описание в Delphi,  LoadLibrary и вызов нужной фукнции.

 

А вот как это сделать на Андроиде, я так и не понял. Я понял что есть обертки, но нужно научиться это делать самому. Кстати многие вопросы и существует здесь из за того, что народу не понятно как это сделать. Нигде нету толкового объяснения, с примером.

Например я нашел статью где описывается обертка в Wifi, подскажите пожалуйста как сделать точно так же  пошагово.

Например для класса WifiInfo

1. https://developer.android.com/reference/android/net/wifi/WifiInfo.html читаем документацию.

2. Что делать дальше?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 ответа на этот вопрос

  • 0
1 час назад, ENRGY сказал:

Привет.

Про программировании в Windows, использовать Windows API просто -

1. Открываем MSDN, находим нужную функцию.  Смотрим из какой она DLL.

2. Затем портируем описание в Delphi,  LoadLibrary и вызов нужной фукнции.

 

А вот как это сделать на Андроиде, я так и не понял. Я понял что есть обертки, но нужно научиться это делать самому. Кстати многие вопросы и существует здесь из за того, что народу не понятно как это сделать. Нигде нету толкового объяснения, с примером.

Например я нашел статью где описывается обертка в Wifi, подскажите пожалуйста как сделать точно так же  пошагово.

Например для класса WifiInfo

1. https://developer.android.com/reference/android/net/wifi/WifiInfo.html читаем документацию.

2. Что делать дальше?

Кто ищет, тот найдёт...

Вот вы статью нашли, полазили бы в блоге, например в разделе "Список всех сообщений" и ...

Дальше, воспользовались бы поиском на этом форуме и ...

Поиск по запросу "обёртки":

Ну и наконец: Полностью транслированное Android API 7-23 уровня

И чуть не забыл, есть же справка официальная Help for RAD Studio Berlin

 

p.s. Всё уже давно разжёвано, вопросы задают по каким-то конкретным моментам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Спасибо большое. Уже разобрался.

 

Но вопрос так и не решен.

Возьмем к примеру тот же ConnectivityManager. Для получения ссылки на него используется функция

function GetConnectivityManager: JConnectivityManager;
var
  ConnectivityServiceNative: JObject;
begin
  ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);
  if not Assigned(ConnectivityServiceNative) then
    raise Exception.Create('Could not locate Connectivity Service');
  Result := TJConnectivityManager.Wrap(
    (ConnectivityServiceNative as ILocalObject).GetObjectID);
  if not Assigned(Result) then
    raise Exception.Create('Could not access Connectivity Manager');
end;


 

Насколько я понял классы получают по разному, эта строчка всегда разная: SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE) для других классов. В хелпе четко прописано что Get an instance of this class by callingContext.getSystemService(Context.CONNECTIVITY_SERVICE).

А вот что делать к примеру для получения такого класса InetAddress  https://developer.android.com/reference/java/net/InetAddress.html

Конкретно нужно вызвать метод isReachable(timeout : Integer).

Т.е. у меня есть все заголовки интерфейса JInetAddress, а вот как получить ссылку на класс я не знаю.

 

(кстати почему у вас подсветки Delphi кода нет - и это на сайте посвященному Delphi? Здесь я выбрал С):  

 

Спасибо, очень жду ответа.

Изменено пользователем ENRGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Все оказалось проще чем я думал. Странно что никто не ответил.

 

Итак, просто пишем одну строчку.

https://github.com/FMXExpress/android-object-pascal-wrapper

uses java.net.InetAddress;
Result := TJInetAddress.JavaClass.getByName(StringToJString('google.com')).isReachable(3000);

 

Или например запуск процесса (Runtime.exec):

https://github.com/FMXExpress/android-object-pascal-wrapper

uses
java.lang.Process, java.lang.Runtime;

var
Process : JProcess;
Runtime : JRuntime;

Process := TJRuntime.JavaClass.getRuntime.exec(StringToJString(sCmd));
Process.waitFor;
Result := Process.exitValue;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Похожий контент

    • От voytalexey
      Может кто-нибудь подсказать как использовать OnCompletionListener в работе с нативными объектами Android?
      Мне надо произвести простейшие действия по окончании проигрывания видеофайла. Для этого предназначена коллбек процедура OnCompletionListener. Но ни одного примера на Дельфи я в Гугле и Яндексе не нашел. А те примеры что нашел затрудняюсь перевести на Дельфи.
      Наиболее часто встречается что-то типа такого:
      mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { Toast.makeText(MainActivity.this, "I'm Finished", Toast.LENGTH_SHORT); } или такое:
      mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { finish(); // finish current activity } }); Возможно ли подобную конструкцию реализовать на дельфийском паскале?
    • От Равиль Зарипов (ZuBy)
      Доброго дня!
      Решил я побороть проблемку single-line в нотификациях (в частности push, т.к. локальные можно выводить в несколько строк)
      Почитал в интернете, набрел на такие статьи 
      https://mobilefirstplatform.ibmcloud.com/blog/2015/11/24/multi-line-gcm-push-notifications/ https://github.com/vivinkrishnan/multi-line-push/blob/master/MultiLineNotifications/apps/MultiLineNotifications/android/native/src/com/MultiLineNotifications/GCMIntentService.java судя по ним нужно просто подменить библиотеку com.embarcadero.gcm.notifications.GCMIntentService на измененную как статье выше
      Вроде плёвое дело, но где найти эту библиотеку и чем скомпилировать исходник?
      Если у кого есть познания в этой области, подскажите в какую сторону рыть. Нам ведь всем такое пригодится
       

      fmx.zip (Seattle, Berlin)                                                                     LocalMultiline.zip (Berlin)
      https://github.com/rzaripov1990/Multiline-Push-and-Local-Notifications
    • От Brovin Yaroslav
      Автор: FMXExpress
      Тип лицензии: Open Source
      Ссылка на проект android-object-pascal-wrapper (OpenSource): https://github.com/FMXExpress/android-object-pascal-wrapper
      Скачать: ZIP
       
    • От fac
      Здравствуйте! Возникла необходимость программного добавления аккаунта на устройстве. Для решения этой задачи были взяты автоматически созданные обертки для Android.accounts.AccountManager, android.accounts.Account и немного поправлены для обеспечения работоспособности. 
       
      При попытке доступа к аккаунтам вот таким образом 
      procedure TForm1.TestBtnClick(Sender: TObject); var AccMan: JAccountManager; Accounts: TJavaArray<JAccount>; Acc: JAccount; i:integer; begin AccMan := TJAccountManager.JavaClass.get(SharedActivityContext); accounts := AccMan.getAccounts; Memo.Lines.Add(IntToStr(accounts.Length)); for i:=0 to accounts.Length-1 do begin Acc := accounts[i]; Memo.Lines.Add(JStringToString(Acc.toString)); end; end; количество аккаунтов я получаю верное, но информацию об аккаунте получить не могу
       
      Что я делаю не так??
      api.zip
    • От Dozent
      Добрый день! Разрабатываю некоторое подобие плеера, в котором воспроизводится как картинка так и видео.
      Запускаю видео в нужном мене порядке через MX плеер. ЗАпускается, потом доходит до запуска картинки тоже запускаю, но потом всё ломается) ПОтому что галерея через которую воспроизводилась картинка висит на заднем плане и больше не показывается. Т.е. получается что всё нормально работает до первого показа картинки а потом ппц!
       
      Подскажите плз как убить работающую галерею с картинкой?!
       
    • От Kamenev_D
      Добрый день. Решил вот так же осваивать FM, и вот тут же сразу возникло пару вопросов, касающихся разработки под Андроид.
      Итак по порядку:
      Есть примеру код на Делфи:
      uses FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Provider, Androidapi.JNI.JavaTypes; cursor: JCursor; cursor := SharedActivity.getContentResolver.query( TJCallLog_Calls.JavaClass.CONTENT_URI, nil, nil, nil, nil); Переводим его в Си
      #include <Androidapi.Helpers.hpp> //#include <FMX.Helpers.Android.hpp> #include <Androidapi.JNI.GraphicsContentViewText.hpp> #include <Androidapi.JNI.Provider.hpp> JCursor *cursor; TJCallLog_Calls *call; cursor = SharedActivity()->getContentResolver()->query(call->JavaClass->CONTENT_URI, NULL,NULL,NULL,NULL ) ; Так вот вопрос, где можно почитать за данные заголовочные файлы? Как вообще узнали что нужно вызывать? Я так понял это Android API, но если читать, за данные методы, то нигде не указано какие хидеры нужно подключать. Вот к примеру SharedActivity. Что это, за что отвечает, аналог чего?  Вот например описание, но где указано какой хидер нужно подключать то? В общем прощу помощи в данном вопросе.
       
      Если создал не в том разделе, прощу перенести в соответствующий.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу