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

UFO 007

Пользователи
  • Постов

    37
  • Зарегистрирован

  • Посещение

Активность репутации

  1. Like
    UFO 007 отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    Нашел времени немного, у себя сделал так, нахожу все сети, заполняю ими ListView, при нажатии на item вызываю ConnectToWifi(ssid, bsid, password: String) а вы какой хотите велосипед такой и изобретайте
    1.JWifiNetworkSpecifier = interface(JObject) оставляем!
    2.
    procedure ConnectToWifi(ssid, bsid, password: String); var ConnectivityManagerNative: JObject; ConnectivityManager: JConnectivityManager; NetworkRequest_Builder: JNetworkRequest_Builder; NetworkRequest: JNetworkRequest; WifiNetworkSpecifier: JWifiNetworkSpecifier; WifiNetworkSpecifier_Builder: JWifiNetworkSpecifier_Builder; WiFicallback: JConnectivityManager_NetworkCallback; begin WifiNetworkSpecifier := TJWifiNetworkSpecifier_Builder.Create .setSsidPattern(TJPatternMatcher.JavaClass.init(StringToJString(ssid), TJPatternMatcher.JavaClass.PATTERN_PREFIX)) .setBssid(TJMacAddress.JavaClass.fromString(StringToJString(bsid))) .setWpa2Passphrase(StringToJString(password)) .build(); NetworkRequest := TJNetworkRequest_Builder.Create .addTransportType(TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI) .removeCapability(TJNetworkCapabilities.JavaClass.NET_CAPABILITY_INTERNET) .setNetworkSpecifier( TJNetworkSpecifier.Wrap((WifiNetworkSpecifier as ILocalObject).GetObjectID)) .build(); WiFicallback := TJConnectivityManager_NetworkCallback.JavaClass.init; ConnectivityManagerNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); connectivityManager := TJConnectivityManager.Wrap((ConnectivityManagerNative as ILocalObject).GetObjectID); connectivityManager.requestNetwork(NetworkRequest, WiFicallback); end; 3. WiFiCallBack это обратный вызов - это класс Java, поэтому вам нужно создать потомка и реализовать необходимые методы. В настоящее время это невозможно сделать в Delphi (хотя listner'ы отлично реализуются), поэтому вам нужно будет сделать это на Java. В коде Java вы можете объявить интерфейс, который может быть передан классу, как в этом примере:
    https://github.com/DelphiWorlds/Kastri/blob/master/Features/Connectivity/DW.Connectivity.Android.pas
     https://github.com/DelphiWorlds/Kastri/tree/master/Java/Base/Connectivity
  2. Like
    UFO 007 отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    а в Яве он разворачивается в целую процедуру, какую процедуру!? Callback это ответный метод, вы так сказать подсоединяетесь к нему
     
    Callback.onAvailable := NetworkonAvailable; и каждый раз когда платформа подключается и объявляет новую сеть готовой к использованию(onAvailable) будет вызываться процедура, которую вам необходимо объявить и описать дальнейшие действия
     
    procedure NetworkonAvailable(network: JNetwork);
    begin
    //
    end;
  3. Like
    UFO 007 отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    перегрузок может быть столько сколько у гугла в api, а там их две
  4. Like
    UFO 007 отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    Так её и не может быть, попробуйте в  Androidapi.JNI.net.wifi заменить 
      JWifiNetworkSpecifier = interface(JObject)
    на
      JWifiNetworkSpecifier = interface(JNetworkSpecifier)
  5. Like
    UFO 007 отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    А нет, могу помочь сейчас, как вы ищите не понимаю 
    https://github.com/AndrewEfimov/Wrappers/blob/master/Androidapi.JNI.net.wifi.pas
     
     
  6. Like
    UFO 007 отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    И не забудьте добавить проверку на версию API, так как тот API только для android 10.
  7. Like
    UFO 007 отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder(); builder.setSsid("wifi-ap-ssid"); builder.setWpa2Passphrase("wifi-ap-password"); Вот это добавлено только для API 29 и выше
    NetworkSpecifierObj:= TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE); NetworkSpecifier:= TJNetworkSpecifier.Wrap((NetworkSpecifierObj as ILocalObject).GetObjectID); Чушь полная, вы запрашиваете сервис соединений ConnectivityManager, а NetworkSpecifier это абстрактный класс он не создается вообще его получают от другого API. WifiNetworkSpecifier и NetworkSpecifier это разные вещи, вам нужен именно WifiNetworkSpecifier.
         
     
      var ConnectivityManagerNative: JObject;   ConnectivityManager: JConnectivityManager;   NetworkRequest_Builder: JNetworkRequest_Builder;   NetworkRequest: JNetworkRequest; WifiNetworkSpecifier: JWifiNetworkSpecifier; WifiNetworkSpecifier_Builder: JWifiNetworkSpecifier_Builder; begin   WifiNetworkSpecifie_Builder:= TJWifiNetworkSpecifier.JavaClass.init;  WifiNetworkSpecifie_Builder.setSsid("wifi-ap-ssid");   WifiNetworkSpecifie_Builder.setWpa2Passphrase("wifi-ap-password"); WifiNetworkSpecifier := WifiNetworkSpecifie_Builder.build;   NetworkRequest_Builder := TJNetworkRequest_Builder.JavaClass.init;   NetworkRequest_Builder.addTransportType(TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI);   NetworkRequest_Builder.setNetworkSpecifier(wifiNetworkSpecifier);   NetworkRequest := NetworkRequest_Builder.build;   ConnectivityManagerNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);   connectivityManager := TJConnectivityManager.Wrap((ConnectivityManagerNative as ILocalObject).GetObjectID);   connectivityManager.requestNetwork(NetworkRequest, callback);  
  8. Like
    UFO 007 отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    Вы можете его даже не создавать
    TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI
  9. Like
    UFO 007 отреагировална krapotkin в Android SDK - с чем едят и как бороться?   
    Ну для начала, на мобильных осях все течет так быстро, что для текущей разработки подходит только текущая IDE поэтому нет смысла в XE вообще. До Delphi 10.1 разработка была абсолютно условной - может взлетит, а может и нет. технология-то сырая. Так что не надо просто глупостями заниматься.
    Про подключение телефона который не видится http://fire-monkey.ru/topic/6431-не-подключается-huawei/#comment-38150
     
    Про версии NDK я тоже где-то тут пост писал. Не смог быстренько найти. Она очень важна особенно для старых Android. Я эксперименты ставил.
    Xiaomi на Android 8 нормально работал а Samsung на Andoird 5.1 валился. Я просто подбором нашел нужную. В целом даже не очень долго. NDK  быстро качаются.
    Из SDK берутся только SDK tools поэтому там не очень критично что за версия, лишь бы пути к нужным exe вписать в настройках делфи.
     
  10. Like
    UFO 007 отреагировална krapotkin в Android SDK - с чем едят и как бороться?   
    Delphi никакого отношения к вашим SDK/NDK не имеет, она использует то что вы установили/ настроили.
    и даже предлагает установить кое-что, с чем точно умеет работать
    Я начиная с XE5 просто ставил Android Studio и SDK / NDK, чтобы иметь возможность контролировать что где у меня стоит, и не лазить по папкам с путем длиной 2000 знаков.
    Просто без AS нет SDK manager, и настройки делать неудобно. 
    Потом выбираем те версии, которые нужны. (запоминаем, что там Delphi хотела поставить) и прописываем пути в настройках delphi
    К последним версиям это стало работать практически в один клик.
    Выбирать, какие устройства видны или нет, тоже делфи ни при чем. Она все делает через ADB. Если ADB не видит девайс, то ни одна другая программа не увидит тоже. Для решения этой проблемы тоже есть тема на форуме, где правится sys - файл с описаниями доступных VendorId / ProductId в стандартном драйвере Googel ADB
×
×
  • Создать...