• 0
msp888

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

Вопрос

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

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

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

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


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

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

  • 0

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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;

 

 

 

 

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: Алмаз Амангельды
      Multi device application 
      Работаю  с WebBrowser и появляется такая проблема что компонент дублируется появляется тоненькая полоска (пикселей 10 или 5 ) которая работает отдельно (т.е можно скролить страницу в разные направления ,  поэтому складывается впечатление что данный компонент Дублируется )
      Вверху tabcontrol к нему добавлен Эффект shadow внизу
      twebBrowser  Align =Client 
      И все эти компоненты лежат на panel 
      Align =client 
       
      Тестирую на экране 5.5
      Естественно вопрос что произошло и как это исправить 
    • Автор: ENRGY
      Как залить с Delphi Android в базу MySql строки, я примерно понял - составляем GET запрос и вставляем строки в параметры, затем считываем их в PHP скрипте и в базу.
      А вот как быть с картинкой. Как добавить картинку через PHP скрипт из программы на Android?
      POST запрос? Кто нибудь делал такое уже?
      Спасибо 
       
      P.s. На данный момент FireDAC не поддерживает работу с MySQL из под Android. Пока только SQLite и  InterBase ToGo. Даже если в будущем будет поддерживать, многие на этом форуме рекомендуют не использовать прямое подключение к базам из под мобильных систем, а использовать прямые GET запросы к примеру к PHP скриптам. Это связано с нестабильностью интернета т.к. так интернет может часто переключаться (от вышки к вышке) и менять параметры подключения. 
    • Автор: Макс Войтенко
      я знаю что можно добавить внешний файл в программу по пути (assets\internal)(скриншот) (раньше получали к нему доступ через)
      loadfromfille(GetDocumentsPath()+"test.txt")
      Сейчас GetDocumentsPath убрали из RadStudio и походу заменили чем то.
      я использовал в свой программе директорию 
      loadfromfille(GetHomePath()+"test.txt"), но я не знаю куда мне добавить программу через deploymant (скриншот)
      Тоесть
      1)GetDocumentsPath = (assets\internal) 
      2)GetHomePath= ??????
      3)GetDocumentsPath убрали из radstudio.
      Какую мне прописать директорию чтоб я имел к ней доступ через GetHomePath()??

    • Автор: Pax Beach
      Мне нужно сделать снимок экрана из своего приложения в приложении DirectX (в игре).
      По-быстрому накидал приложение, исходники здесь: MakeScreenshot-Forum.zip

      1. по нажатию единственной кнопки будет выполнена серия из 16 снимков экрана. Если запущен Скайп, то фотографироваться будет содержимое его окна.
      2. По нажатии CTRL+ALT+F9 будет сделан единичный снимок
      3. Label внизу показывает сколько миллисекунд затрачено на вывод снимка
      4. В комментах так же вы найдете, как работать со снимками через буфер обмена.
       
      Работа выполняется через GetDC(NULL);
      Windows 10 x64. Снимки делаются. И DirectX тоже нормально фотографируется.
      НО! только в оконных приложениях.
      Если приложение DirectX полноэкранное, то на всех снимках одна и та же картинка с первого снимка.
      То есть изменение буфера экрана в приложении ни как не отражается на снимках.
       
      Что нужно? Необходимо делать снимки конкретного приложения через интерфейс DirectX, а точнее, я так понимаю, через DirectShow. Тогда не будет разницы в окне оно или на полный экран.
      Помогите плиз, знающие люди, с решением этой задачи.
      Гарантирую вам от сообщества большой почет, от меня огромный респект, если это принесет доход, то еще и очень приятный бонус.
       
      Ссылки теме:
      1. DIRECTX FOR DELPHI
      2. unofficial version of DelphiX
      3. DirectX для начинающих
      4. MinHook - The Minimalistic x86/x64 API Hooking Library
      5. Various methods for capturing the screen
      6. Вывод графики на рабочий стол Windows с использованием оверлеев DirectX
      7. Project JEDI
      8. Реализация перехвата вызовов API — исчерпывающе про внедрение DLL, если разобраться, + это на Delphi
      UPD:
      9. Серия видео уроков Пишем D3D-хук — все понятно, только в Delphi перенести нужно.
      UPD 2:
      Научился рисовать в Direct3D и ловить интерфейс IDirect3DDevice9. Теперь делаю DLL ловушку для реализации снимков.
       
    • Автор: Алмаз Амангельды
      Привет всем! 
      Кодить начал на андроид совсем недавно возникают некие проблемы и спорные вопросы, и перейду сразу к вопросу как пользоваться BoringSSL под Андроид 6 и ниже, возможно ли использовать BoringSSL  на андроидах ниже 6, и как реализовать сие чудо!
      З.Ы если есть возможность опишите по подробнее...
      (дело в том что я хочу спрарсить парочку постов с паблика VK)
       
    • Автор: msp888
      Если Wi-Fi на телефоне работает в режиме клиента (подключается к внешней точке доступа), то как с ним работать понятно.
      Если же Wi-Fi на телефоне (ОС Android) работает в режиме персональной точки доступа, то как из программы получить свой ip-адрес и другие параметры сети.
      Кто знает, помогите, желательно исходный код на Delphi.
       
    • Автор: Евгений Корепов
      TThread.ForceQueue не работает в Android. Но можно утешить себя тем, что отлично работает в Windows ;-)
      Код следующий:
      unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo, FMX.Controls.Presentation, FMX.ScrollBox; type TForm1 = class(TForm) Memo: TMemo; procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } procedure MyLog(AMessage : String); procedure TestForceQueue; end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.TestForceQueue; begin MyLog('In main thread start'); TThread.ForceQueue(Nil, procedure begin MyLog('In ForceQueue start'); TThread.Sleep(2000); MyLog('In ForceQueue stop'); end); MyLog('In main thread stop'); end; procedure TForm1.FormShow(Sender: TObject); begin TestForceQueue; end; procedure TForm1.MyLog(AMessage : String); Var ATime : String; LMessage : String; begin DateTimeToString(ATime, 'dd.mm.yyyy hh.nn.ss.zzz', Now); LMessage:=ATime + ' ' + AMessage; TThread.Synchronize(Nil, procedure begin Memo.Lines.Add(LMessage); end); end; end. В Windows все работает как ожидается:
      В андроиде ситуация следующая:
      Т.е. нифига не работает.
      Тестовый проект прилагаю.
      test094 ForceQueue test.7z
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу