Local ip almak

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
AliZairov
Üye
Mesajlar: 341
Kayıt: 06 Nis 2012 03:09
Konum: Azerbaycan, Bakü
İletişim:

Local ip almak

Mesaj gönderen AliZairov »

İyi akşamlar. Küçük bir kütüphane yapıyorum gerek ola bilecek fonksiyonlar android için. Local ip almak istiyorum sonuç istediğim gibi olmuyor.

Kod: Tümünü seç

function TDXLibrary.GetIPAddress: string;
var
  WifiManagerObj: JObject;
  WifiManager: JWifiManager;
begin
  WifiManagerObj := SharedActivityContext.getSystemService(TJContext.JavaClass.WIFI_SERVICE);
  WifiManager := TJWifiManager.Wrap((WifiManagerObj as ILocalObject).GetObjectID);
  Result := WifiManager.getConnectionInfo.getIpAddress.ToString;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Local ip almak

Mesaj gönderen mrmarman »

Benim kod çalışıyor. Farkı incelersin.

Kod: Tümünü seç

USES
  Androidapi.JNIBridge,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.Helpers;

type
  JWifiManagerClass = interface(JObjectClass)
  ['{69F35EA7-3EB9-48AA-B7FC-4FFD0E7D712F}']
    function _GetACTION_PICK_WIFI_NETWORK: JString;
    function _GetEXTRA_WIFI_INFO: JString;
    function _GetWIFI_STATE_CHANGED_ACTION: JString;
    property ACTION_PICK_WIFI_NETWORK: JString read _GetACTION_PICK_WIFI_NETWORK;
    property EXTRA_WIFI_INFO: JString read _GetEXTRA_WIFI_INFO;
    property WIFI_STATE_CHANGED_ACTION: JString read _GetWIFI_STATE_CHANGED_ACTION;
  end;

  [JavaSignature('android/net/wifi/WifiInfo')]
  JWifiInfo = interface(JObject)
  ['{4F09E865-DB04-4E64-8C81-AEFB36DABC45}']
    function getBSSID:jString; cdecl;
    function getHiddenSSID:Boolean; cdecl;
    function getIpAddress:Integer; cdecl;
    function getLinkSpeed:integer; cdecl;
    function getMacAddress:JString; cdecl;
    function getNetworkId:integer; cdecl;
    function getRssi:integer; cdecl;
    function GetSSID:jString; cdecl;
  end;

  JWifiInfoClass = interface(JObjectClass)
  ['{2B1CE79F-DE4A-40D9-BB2E-7F9F118D8C08}']
    function _GetLINK_SPEED_UNITS:JString;
    property LINK_SPEED_UNITS: JString read _GetLINK_SPEED_UNITS;
  end;

  TJWifiInfo= class(TJavaGenericImport<JWifiInfoClass, JWifiInfo>) end;

  [JavaSignature('android/net/wifi/WifiManager')]
  JWifiManager = interface(JObject)
  ['{DA7107B9-1FAD-4A9E-AA09-8D5B84614E60}']
    function isWifiEnabled:Boolean;cdecl;
    function setWifiEnabled(enabled:Boolean):Boolean; cdecl;
    function getConnectionInfo :JWifiInfo; cdecl;
    function getWifiState :Integer; cdecl;
    function disconnect :Boolean; cdecl;
  end;

  TJWifiManager = class(TJavaGenericImport<JWifiManagerClass, JWifiManager>) end;

function GetIPAddress: string;
var // Access WiFi State ENABLE olmalı...
  WifiManagerObj: JObject;
  WifiManager: JWifiManager;
  Ip : Integer;
begin
  WifiManagerObj := SharedActivityContext.getSystemService(TJContext.JavaClass.WIFI_SERVICE);
  WifiManager    := TJWifiManager.Wrap((WifiManagerObj as ILocalObject).GetObjectID);
  Ip             := WiFiManager.getConnectionInfo.getIpAddress;
  Result :=  Format('%d.%d.%d.%d', [ ip and $FF, (ip shr 8) and $FF, (ip shr 16) and $FF, (ip shr 24) ]);
end;
Kullanımı :

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := GetIPAddress;
end;
Resim
Resim ....Resim
Cevapla