Перейти к содержанию
Fire Monkey от А до Я
  • 0

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


ENERGY

Вопрос

Привет.

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

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

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

 

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

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

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

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

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

Ссылка на комментарий

Рекомендуемые сообщения

  • 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;

 

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