• 0
msp888

Персональная точка доступа Wi-Fi

Вопросы

Если Wi-Fi на телефоне работает в режиме клиента (подключается к внешней точке доступа), то как с ним работать понятно.

Если же Wi-Fi на телефоне (ОС Android) работает в режиме персональной точки доступа, то как из программы получить свой ip-адрес и другие параметры сети.

Кто знает, помогите, желательно исходный код на Delphi.

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


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

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

  • 0
3 часа назад, krapotkin сказал:

брр, IP либо есть либо нет. при чем тут где точка доступа?

есть то оно есть, но получать нужно по другому.

можете потестить сами, скачайте Deviceinfo и запустите точку доступа. айпи адреса не будет

а вот как на java это делается

http://stackoverflow.com/questions/9573196/how-to-get-the-ip-of-the-wifi-hotspot-in-android

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


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

вообщем я попробовал, но так и не смог получить ip адрес с точки доступа. может где накосячил

Скрытый текст

 

uses


  AndroidApi.JNI.GraphicsContentViewText, AndroidApi.JNI.OS, AndroidApi.Helpers, AndroidApi.JNI.Net,
  AndroidApi.JNI.JavaTypes, AndroidApi.JNIBridge, AndroidApi.JNI.Provider, AndroidApi.JNI.Telephony,
  AndroidApi.JNI.Java.Net, AndroidApi.Log,

procedure Log(const aSource: string);
var
  M: TMarshaller;
begin
  LOGI(M.AsUtf8(aSource).ToPointer);
end;

function HasPermission(const Permission: string): Boolean;
var
  aPerm: string;
begin
  if Permission.StartsWith('android.permission.') then
    aPerm := Permission
  else
    aPerm := 'android.permission.' + Permission;
  Result := TAndroidHelper.Context.checkSelfPermission(StringToJString(aPerm))
    = TJPackageManager.JavaClass.PERMISSION_GRANTED
end;

function convertor(ip: integer): string;
begin
  Result := Format('%d.%d.%d.%d', [ip and $FF, ip shr 8 and $FF, ip shr 16 and $FF, ip shr 24 and $FF])
end;

function GetWifiManager: JWifiManager;
var
  WifiManagerObj: JObject;
begin
  Result := nil;
  if HasPermission('ACCESS_WIFI_STATE') then
  begin
    WifiManagerObj := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.WIFI_SERVICE);
    if not Assigned(WifiManagerObj) then
      raise Exception.Create('Could not locate Wifi Service');
    Result := TJWifiManager.Wrap((WifiManagerObj as ILocalObject).GetObjectID);
    if not Assigned(Result) then
      raise Exception.Create('Could not access Wifi Manager');
  end
  else
    Log(':: ZDeviceInfo :: permission ACCESS_WIFI_STATE denied');
end;

 


procedure GetAddress(out aMac, aWifiIP: string);
var
  WifiManager: JWifiManager;
  WifiInfo: JWifiInfo;
  ip: integer;

  Intf: JNetworkInterface;
  Adrs: JInetAddress;
  IntfEnum, AdrsEnum: JEnumeration;
  IParr: TJavaArray<Byte>;
  ipserver: string;
begin
  aMac := '';
  aWifiIP := 'unknown';
  WifiManager := GetWifiManager;
  if Assigned(WifiManager) then
  begin
    WifiInfo := WifiManager.getConnectionInfo;
    aMac := JStringToString(WifiInfo.getMacAddress);
    ip := WifiInfo.GetIPAddress;
    aWifiIP := convertor(ip);
  end; // получаем данные по Wifi

  // Hot Spot #1
  if aWifiIP.Equals('0.0.0.0') then
  begin
    if Assigned(WifiManager) then
    begin
      ip := WifiManager.getDhcpInfo.serverAddress;

      ipserver := convertor(ip);

      Log('---------- ' + ipserver);
      IParr := TJavaArray<Byte>.Create(ipserver.Length);
      IParr := StringToJString(ipserver).getBytes;

      Adrs := TJInetAddress.JavaClass.getByAddress(IParr);
      if Adrs = nil then
        Adrs := TJInetAddress.JavaClass.getByName(StringToJString(ipserver));
      if Adrs <> nil then
    	begin
        Log('---------- ' + ipserver + ' :: ' + JStringToString(Adrs.getHostName) + ' :: ' +
          JStringToString(Adrs.getHostAddress));
      	aWifiIP := JStringToString(Adrs.getHostAddress);
    	end;
    end;
  end;
  exit; // !!!!!!!!!

  // Hot Spot #2  
  if aWifiIP.Equals('0.0.0.0') then
  begin
	IntfEnum := TJNetworkInterface.JavaClass.getNetworkInterfaces;
    if IntfEnum.hasMoreElements then
    begin
      Intf := TJNetworkInterface.Wrap((IntfEnum.nextElement as ILocalObject).GetObjectID);
      Log('---------- first interface :: ' + JStringToString(Intf.getDisplayName) + ' :: ' +
        JStringToString(Intf.getName));

      while Intf <> nil do
      begin
        AdrsEnum := Intf.getInetAddresses;
        if AdrsEnum.hasMoreElements then
        begin
          Adrs := TJInetAddress.Wrap((AdrsEnum.nextElement as ILocalObject).GetObjectID);
          Log('---------- first address :: ' + JStringToString(Intf.getDisplayName) + ' :: ' +
            JStringToString(Adrs.getHostName) + ' :: ' + JStringToString(Adrs.getHostAddress));

          while Adrs <> nil do
          begin
            // if (not Adrs.isLoopbackAddress) then
            // begin
            // Log('---------- Adrs.isLoopbackAddress');
            // aWifiIP := JStringToString(Adrs.getHostAddress);
            // break;
            // end;

            Adrs := TJInetAddress.Wrap((AdrsEnum.nextElement as ILocalObject).GetObjectID);
            if not Adrs.isLoopbackAddress then
              Log('---------- address :: ' + JStringToString(Intf.getDisplayName) + ' :: ' +
                JStringToString(Adrs.getHostName) + ' :: ' + JStringToString(Adrs.getHostAddress));
          end;
        end;

        Intf := TJNetworkInterface.Wrap((IntfEnum.nextElement as ILocalObject).GetObjectID);
        if Intf <> nil then
          Log('---------- interface :: ' + JStringToString(Intf.getDisplayName) + ' :: ' +
            JStringToString(Intf.getName));
      end;
    end;
  end;
end;

 

 

 

 

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


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

    • От Astghik
      Hello !!!
      I want onButtonClick create popup. I use TPopup component. All good, but on android "Back button" click closing forma. But I want close popup (when popup is shown).

       
      //---------------------------------------------------------------------------------
      void __fastcall  btn3PointsClick(TObject *Sender)
      {
          PopUpSettings->IsOpen = true;
          PopUpSettings->PlacementTarget = btn3Points;
          PopUpSettings->BringToFront();
      }
      //-------------------------------------------------------------------------------------
      void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose)
      {
          try {
              if (PopUpSettings->IsOpen == true) {
                  CanClose = false;
              }
              else {
                  CanClose = true;
              }
          } __finally {
              PopUpSettings->IsOpen = false;
          }
      }
      //-------------------------------------------------------------------
       
    • От Rokweb
      Таймер с интервалом 1мс заметно подтормаживает во время выполнения анимации TFloatAnimation в Tokyo. У всех так или только у меня?
    • От Rokweb
      Здравствуйте.
      Речь пойдёт об Android.
      Использовал в Berlin данный unit для проигрывания звуков (TMediaPlayer не подходит) и все отлично работало. Сейчас перешел на Tokyo и происходит зависание в цикле:
       
      while not GLoaded do begin Sleep(10); Application.ProcessMessages; end;  
      Модуль прикрепил в сообщении.
       
      Так же интересует - возможно ли, использовать стиль, созданный в процессе разработки Android приложения - в iOS и если да - то как это правильно реализовать (почти каждый контрол имеет сейчас свой стиль)?
       
      Прошу помощи.
      GameAudioManager.zip
    • От zekelive
      Товарищи, здравствуйте. Хотел бы проконсультироваться с вами на довольно сложно для меня тему. Имеется клиентское мобильное приложение на Андроид. Принцип его просто, загружает фирмы из БД в scrollbox. За счёт того, что сразу загрузка всех данных из сервера занимает длительное время, было принято решение загружать с сервера только ключевую информацию (название фирмы), а остальную информацию загружать из локальной БД. При этом, т.к. файл БД можно легко вытащить из apk файла любому человеку, размещать всю БД на локалке нельзя. Только информацию в целом не представляющую большой значимости в отдельности от названия фирмы и не только. 
      Вопрос, правильная ли схему построения была выбрана с точки зрения защиты данных (если это так можно назвать), и оптимизации загрузки информации. 
      Приветствуются ваши советы, как лучше построить схему взаимодействия приложения с БД, или как лучше защитить данные. В идеале для быстродействия, загнать побольше данных в локальную БД. 
    • От Edward Tarasov
      Привет всем. кто сталкивался с такой ерундой, что в webbrowser вместо сайта тупо белый экран?? причем сам сайт отображаеться норм, и на том же планшете, но в стандартном бразуере и на компе... и именно этот сайт не пашет из приложения
    • От zekelive
      Друзья, первый раз столкнулся с картами и не пойму в чем дело. Приложение подписано, релизная версия. Добавил карты на форму и запустил на компиляцию, все отлично. Запускаю на смартфоне - приложение сразу вылетает. Ничего не прописывал связанное с картами, просто добавил компонент на форму. Что не так ?
    • От Антон Емельянов
      Приложение не даёт DeviceToken...  ,  (DeviceID есть)
      FDeviceToken := FPushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];

      Тест пример реализован по статье нашего замечательного модератора
      http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html

      Используется:
      Компиляция SDK Android 5.1
      Среда-разработки Delphi XE 10.2 

      Пожалуйста запустите проект на своей версии Delphi..
      Посмотрите будет  сгенерирован ТОКЕН или нет.. 
      в случае удачи ,  напишите какая у вас версия Дельфи..

      Исходник-проекта:  https://drive.google.com/open?id=1mCPvYYd0tXBALt-J_ymVuzChj_TtztC0
      Только APK: https://drive.google.com/open?id=1x8q4RyVylpGOMjcQYjlvFxFBSQaYs7NL 


      Помогите люди добрые 
      За помощь и консультацию отблагодарю..
       

    • От AliZairov
      Привет. Я сделал новую версию YouTubeApi компоненты. Поддерживаемые VCL & FMX + Mobile.
      Никаких официальных YouTube Api компоненты. Только данные с парсинг. Пример доступен в архиве.
       
      Новый
      ===
      v1.4 - 25/02/2018
        + Устранение проблем
      YouTubeApiDelphi
    • От Алексей Алексеев
      Здравствуйте! Помогите начинающему, всё перелазил, всё что мог и всё безрезультатно.
      Такая проблема: 
      Стоит задача убрать перенос строки в Memo:
      Из 
      "1строка"
      "2строка" 
      сделать:
      "1строка 2строка" .
      Казалось бы все просто:
      memo1.Text:=memo1.Text.Replace(#13#10,' '); И на Windows всё работает, но на Android отказывается!
      Просто не реагирует, ошибок не выдает. Проверял на XE8 и на 10.2.
      Может дело в смартфоне Xiomi miMax? Так как вообще memo на нём глючит...
    • От gutalin79
       
      Доброго времени суток!
      Хотел у Вас спросить. Есть ли возможность сделать на Delphi под Android кнопку которая была бы доступна в режиме блокировки? То есть чтобы я мог её нажать и включить фонарик или ещё что-нибудь и при этом не пришлось разблокировать телефон. Заранее благодарю, за ответ!  

  • Последние посетители   0 пользователей онлайн

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