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

UFO 007

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

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

  • Посещение

Информация о UFO 007

  • День рождения 30.01.1968

Информация

  • Пол
    Мужчина
  • Город
    Saint Petersburg
  • Интересы
    Радио-Електроника-Телевизия

Посетители профиля

371 просмотр профиля
  1. Так вот где собака порылась: а то "интерфейситься" не туда, втыкать "левую" перегрузку... А процедура Ваша - "огонь": подключается на "ура", но (куда же без этих "но") напрягает вот этот снэкбар: это - проделки Андрюхи (из глубины ядра)? Избавиться никак нельзя? И а поподробней нельзя?: какими компонентами/экземплярами каких классов/через какие свойства/методы...? А ещё лучше на паскале.
  2. перегрузка function setNetworkSpecifier(networkSpecifier: JWifiNetworkSpecifier): JNetworkRequest_Builder; cdecl; overload; тел пишет: Invoke error: method not found (а чего стоило ожидать?)... А ведь не зря я это (интуитивно) упоминал: оказывается (точнее - как Дэлфе объяснить?) что public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parcelable { моя конструкция кричит (что естественно) "несовместимые типы"... а что касается а процедура возвращает ЧТО? - правильно: void... вот поэтому и функция ИмяФункции(любые параметры):JNetwork;
  3. Я, конечно дико извиняюсь, но сегодня - "не Ваш день": конструкция с присваиванием (мож по-Явовски так и можно, но... [я, кстати, наивно пытался заменить '{' после onAvailable на begin - так подчёркивало красным]) провалилась с треском (то же самое красное подчёркивание)... СитуЁВину вродь как выправило (убралось подчёркивание) такое: Function NetworkonAvailable(network: JNetwork): JNetwork; begin /// тут чё писать - уму не растяжимо: мож Хто подскажет??? end; Function TForm1.WIfiConnect(SSIDtoConnect: string): boolean; .... /// .... Callback.onAvailable(NetworkonAvailable(ConnectivityManager.getActiveNetwork)); ... end но "... меня терзают смутные сомнения ..." что мы с Вами изобретаем такой лИСАпед, который не то, что не взлетит (как должно), а даже - не поедет... З.Ы. Сомнения обосновываются, как минимум, тем, что предка (родителя) WiFiNetworkSpecifier мы переопределили и Х-его-З в какую сторону (поможет это или только помешает???)... В общем - я на "измене" и в успех верится слабо...
  4. "... так вот ты какой, Северный Олень..." или "... а Ларчик открывался просто: ..." просто вместо открывания скобки надо присваивать (:=)... OnePeople, спасибо Вам огромное за то, что якшаетесь со мной как с маленьким... Дело в том, что моё "портфолио" состоит из десятка-полтора VCL-програмулин (для Винды - соответственно и, как видите - у мя тож не ПРОФ, а хобби) а вот с Андрюхой - это мой первый опыт. Но позволю себе заметить: типа: по-библейски - "И был сначала Pascal, потом TurboPascal, потом всё это дело обросло формами, эвентами, мессагами... И лишь на 7-й день явилась Delphi-1..." А потом (которые я пользовал) D7, D2010, xe2, xe8... А потом погнала "Международная панорама": Берлин, Токио, Сиэтл, Рио, Сидней... Пардон - если мой тон показался резковатым. З.Ы. иСЧё раз - огромное спасибо
  5. дык брешет-то с АПИ 23, но подключает (что очень для меня неожиданно т.к. как часы работало только из-под хе8, а 10.3.3 Рио и 10.4.1 Сидней - трассируй/не трассируй не подключалось и что повлияло: Сидней 10.4.2 или (скорее) ветвление по БуилдВерсион)? а на РедМи 9Т (АПИ 29) в настройках ВайВай (удержание значка в "шторке") - ЕСПха только в списке доступных... А по поводу КэлБэк - как на Паскале реализовать такое: 1: networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { manager.bindProcessToNetwork(network); } else { //This method was deprecated in API level 23 ConnectivityManager.setProcessDefaultNetwork(network); } try { //do a callback or something else to alert your code that it's ok to send the message through socket now } catch (Exception e) { e.printStackTrace(); } manager.unregisterNetworkCallback(this); } }); у меня получается: ConnectivityManager:= GetConnectivityManager; if ConnectivityManager <> nil then begin 1: Callback:= TJConnectivityManager_NetWorkCallback.JavaClass.init;//.Create; ConnectivityManager.registerDefaultNetworkCallback(Callback); ConnectivityManager.requestNetwork(NetworkRequest, Callback); Callback.onAvailable(ConnectivityManager.getActiveNetwork); end else ShowMessage('Не удалось получить экземпляр менеджера подключений'); меня смущает то, что у нас метод onAvailable хочет один-единственный параметр (NetWork: JNetWork), а в Яве он разворачивается в целую процедуру (где можно накрапать ого-го-го)... Тем более - он процедура а не булева ф-ция: понять доступна или нет указанная сеть невозможно...
  6. RedMi_4Pro(АПИ_23) хоть и пишет "Not Connected", но при удержании значка ВайВай (что в "шторке") - ESP-007.1M подключено без доступа в интернет (даже после удаления этой сети из списка сохранённых)... Стало быть глючит: function IsWiFiConnected: Boolean; var ConnectivityManager: JConnectivityManager; WiFiNetwork: JNetworkInfo; begin ConnectivityManager := GetConnectivityManager; WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI); Result := WiFiNetwork.IsConnected; end; а под хе8 пахала на "ура"...
  7. заменил на WifiNetworkSpecifier_Builder.setIsEnhancedOpen(false); и хоть (true), хоть (false) т.е. расширенная/нерасширенная, но открытая (мож и здесь неправильно понимаю), всёрно "Not Connected". (ЕСПэха только в списке доступных)... А мож КэлБэк виноват? (тут, если честно, вообще не догоняю - КэлБэк: это событие, прерывание, или ... ??? когда наступает/происходит и как работает? Если можно, плз, в трёх словах) Заполнил чем под руки попало.
  8. ... подчёркивание пропало, компилится - норм, но тел упорно пишет "Not Connected"... Вот весь код: procedure TForm1.Button1Click(Sender: TObject); var ts: TStringList; begin BuildCode:= TJBuild_VERSION.JavaClass.SDK_INT; memo1.Lines.Add(inttostr(BuildCode)); // ts:= TStringList.Create; // WIfiScan('ESP-007', ts); // memo1.Lines.AddStrings(ts); WIfiConnect('ESP-007.1M'); if IsWiFiConnected then memo1.Lines.Add('Connected') else memo1.Lines.Add('Not Connected'); end; Function TForm1.WIfiConnect(SSIDtoConnect: string): boolean; Var {$IfDEF ANDROID} conf: JWIfiConfiguration; list: JList; iter: JIterator; Capabilities: JNetworkCapabilities; ConnectivityManager: JConnectivityManager; Callback: JConnectivityManager_NetWorkCallback; NetworkRequest_Builder: JNetworkRequest_Builder; NetworkRequest: JNetworkRequest; WifiNetworkSpecifier: JWifiNetworkSpecifier; WifiNetworkSpecifier_Builder: JWifiNetworkSpecifier_Builder; {$EndIf} Begin SSIDtoConnect:= '"'+SSIDtoConnect+'"'; Try if BuildCode < 29 then Begin // SharedActivityContext WIfiManagerObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.WIfI_SERVICE); WIfiManager := TJWIfiManager.Wrap((WIfiManagerObj as ILocalObject).GetObjectID); conf:= TJWIfiConfiguration.JavaClass.init; conf.SSID:= StringToJString(SSIDtoConnect);//'"ESP-007.1"'); conf.allowedKeyManagement.&set(TJWIfiConfiguration_KeyMgmt.JavaClass.NONE); netID:= WIfiManager.addNetwork(conf);// добавляем внаглую - не мешало бы проверить может она уже есть в ConfiguredNetworks? list:= wIfiManager.getConfiguredNetworks; iter := list.iterator; While (iter.hasNext) Do Begin conf := TJWIfiConfiguration.Wrap((iter.next as ILocalObject).GetObjectID); If JStringToString(Conf.SSID) = SSIDtoConnect Then// '"ESP-007.1"' Begin wIfiManager.disconnect; wIfiManager.enableNetwork(Conf.networkId, true); wIfiManager.reconnect; // Result:= Sleep(1500); End; End; End Else // BuildCode >= 29 Begin WifiNetworkSpecifier_Builder:= TJWifiNetworkSpecifier_Builder.JavaClass.init; WifiNetworkSpecifier_Builder.setSsid(StringToJString(SSIDtoConnect));//'"'+'wifi-ap-ssid'+'"' WifiNetworkSpecifier_Builder.setWpa2Passphrase(StringToJString('')); // wifi-ap-password WifiNetworkSpecifier := WifiNetworkSpecifier_Builder.build; memo1.Lines.Add('NetworkSpecifier'+JStringToString(WifiNetworkSpecifier.toString)); NetworkRequest_Builder:= TJNetworkRequest_Builder.JavaClass.init; NetworkRequest_Builder.addTransportType(TJNetworkCapabilities.JavaClass.TRANSPORT_WIFI); NetworkRequest_Builder.addCapability(TJNetworkCapabilities.JavaClass.NET_CAPABILITY_INTERNET); NetworkRequest_Builder.setNetworkSpecifier(WifiNetworkSpecifier);// as JNetworkSpecifier NetworkRequest := NetworkRequest_Builder.build; memo1.Lines.Add('NetworkRequest'+JStringToString(NetworkRequest.toString)); ConnectivityManager:= GetConnectivityManager; Callback:= TJConnectivityManager_NetWorkCallback.JavaClass.init;//.Create; if ConnectivityManager <> nil then ConnectivityManager.requestNetwork(NetworkRequest, Callback); Callback.onAvailable(ConnectivityManager.getActiveNetwork); End; Result:= IsWiFiConnected; Except on E: EJNIException do ShowMessage('Произошла ошибка класса: ' +#13 +#10 + E.ClassName +#13 +#10 + 'c сообщением: ' +#13 +#10 + E.Message); End; // If Result Then // MyShwMsg('Подключение: связь с устройством' + #10 + #13 + SSIDtoConnect // + #10 + #13 + ' установлена.'); End; тел точку доступа видит, но... мож дело в setWpa2Passphrase - т.д. открытая: ВайВайМанагер через TJWIfiConfiguration_KeyMgmt.JavaClass.NONE подключался (правда в АПИ23) на "Ура"...
  9. Выкопал в силиконовой долине следующее: public abstract class NetworkSpecifier extends Object java.lang.Объект ↳ спецификация android.net.networks Известные прямые подклассы Спецификатор телефонных сетей, WifiawarenetworkSpecifier, WifinetworkSpecifier ну, а раз уж WifiNetworkSpecifier есть подкласс NetworkSpecifier, то должно быть что-то типа иерархии: type JWifiNetworkSpecifier = class(TJNetworkSpecifier) ... end; наследник-то будет вродь-как совместимого типа... После ребута Дэлфей выглядеть стало поприятней но красное подчёркивание говорит, что нет такой перегрузки
  10. [DCC Error] wifi_sdk.pas(167): E2250 There is no overloaded version of 'setNetworkSpecifier' that can be called with these arguments В Androidapi.JNI.Net прописано: [JavaSignature('android/net/NetworkRequest$Builder')] JNetworkRequest_Builder = interface(JObject) ['{AA7B1C54-8947-4A75-AEAB-8983141D28A7}'] function addCapability(capability: Integer): JNetworkRequest_Builder; cdecl; ... function setNetworkSpecifier(networkSpecifier: JString): JNetworkRequest_Builder; cdecl; overload; function setNetworkSpecifier(networkSpecifier: JNetworkSpecifier): JNetworkRequest_Builder; cdecl; overload; end; и добавление function setNetworkSpecifier(networkSpecifier: JWiFiNetworkSpecifier): JNetworkRequest_Builder; cdecl; overload; ситуЁвину не выправляет - а ведь нативный (Явовский) Буилдер (точнее его setNetworkSpecifier) принимает параметр именно типа WiFiNetworkSpecifier - как ето дело объегорить?
  11. И иСЧё раз огромнейшее СПАСИБО!!! И, пардон, но Ефимовский Androidapi.JNI.net.wifi.pas прикручен был ещё к Dxe8 (где я успешно написал и откатал прогу, но... для API 23 а проблемы "несостыковки" начались с появлением у мя Honor 8A [API 28] и RedMI 9T[API 29]) а вот то, что в нём может оказаться искомый специфер - ет протормозил (ещё раз Мерси). Ну и само-собой: if TJBuild_VERSION.JavaClass.SDK_INT < 29 then WiFiManger else Specifiers
  12. Если я правильно усёк, то это там, где context.getSystemService а там, где ... = New ... => по-нашему будет .Create. А по поводу это - к Ярославу Бровину (если не изменяет память) или (точнее) к его конторе (Ембаркадеро)... Ну, или кто поумнее(пограмотней) моего подскажет где (в каком файле) и что нужно прописать чтобы к нативному (явовскому) JWifiNetworkSpecifier-у приинтерфейситься правильно...
  13. TJWifiNetworkSpecifier и его Буилдер: [DCC Error] wifi_sdk.pas(81): E2003 Undeclared identifier: 'JWifiNetworkSpecifier_Builder' как быть? в файле Androidapi.JNI.Net.pas. прописал JWiFiNetworkSpecifierClass = interface(JObjectClass) ['{09C5C88A-A950-4C2F-B0F0-E03989C16220}'] end; [JavaSignature('android/net/WiFiNetworkSpecifier')] JWiFiNetworkSpecifier = interface(JObject) ['{04D0A623-E880-404E-8E1D-8CC4DDB8DCAF}'] end; TJWiFiNetworkSpecifier = class(TJavaGenericImport<JWiFiNetworkSpecifierClass, JWiFiNetworkSpecifier>) end; и всёрно Е2003...:(
  14. Спасибо Огромное!!! Ну, допустим, Manager у меня "завёрнут" более-или-менее симпотЯШно: function GetConnectivityManager: JConnectivityManager; var ConnectivityServiceNative: JObject; begin ConnectivityServiceNative := TAndroidHelper.Context.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; а за остальное - нижайший поклон. А по поводу как раз и хотел бы разобраться (т. е. понять для себя) - какая разница между .Create, и .Wrap (где можно/НЕможно-нужно/НЕнужно применять или в такой-то ситуации необходимо .Create, а в такой-то только .Wrap) а из Ваших подсказок вытекает, что ещё и .Init существует... Я к тому, что в VCL ничего кроме Create не существовало, а в fmx - в какой ситуации и кого из этой троицы задействовать? Спасибо.
  15. Спасибо, конечно, огромное, но... из-за постоянного апдейта SDK (новому железу - новые библиотИки) вылазит конфликт, благодаря которому, свой "скелет" пришлось реализовывать на Яве. Хотя - может стОит присмотреться к Вашему "исходнику" (мож даже на яву "перевести")... А вообще в потоки я не въехал изначально: у ZX-Spectrum (если не изменяет память) были ещё и каналы - отсюда и путаница: придётся восполнять пробелы... Да и в Дэлфе упёрся в интерфейсы Явовских классов... Вот теперь и на распутье...
×
×
  • Создать...