Merhaba Arkadaşlar
Bu yazımızda, sizlere android de ip adresini alan kod parçacığını paylaşacağım. Özellikle, kullanıcılarınızdan girdi aldığınız uygulamalarda geliştirici olarak, API ye atılan sorgularda kullanıcı ip adresini görmeyi arzularız. Ya da güvenli ödeme sistemlerini uygulamanıza entegre ediyorsanız, Iyzico gibi ödeme platformları bu bilgiyi sizlerden isteyecektir.
Öncelikli olarak, IP adresini alabilmemiz için AndroidManifest.xml
dosyamızda aşağıdaki izin tanımlanmalıdır.
<uses-permission android:name="android.permission.INTERNET" />
Sonrasında ise kullanacağınız Activity / Fragment
yada Helper class
larınızda aşaıdaki fonksiyon aracılığıyla , IP adresini string olarak almanız mümkün olacaktır.
public String getIPAddress() { String ipaddress = ""; try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(inetAddress.getHostAddress()) ) { ipaddress = inetAddress.getHostAddress(); } } } } catch (SocketException ex) { } return ipaddress; }
Yukarda ki fonksiyonda IPV4 adresini almamıza yarayan kısım ise aşağıdaki satırda belirtilmiştir
if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(inetAddress.getHostAddress()) )
Ayrıca bazı arkadaşlarımız muhtemelen InetAddressUtils
in çözümlenemdiği hatası ile karşılaşacatır. Bu hatanın sebebi ise bildiğiniz üzere, API version 23 ve sonrasında Apache
paketlerinin kullanımının kaldırılmış olmasıdır. Bu duruma karşın, projenizi API version 23 öncesi build ederek devam edebilir ya da kendiniz Apache
kütüphanelerini ayrı bir kütüphaneymiş gibi ekleyebilirsiniz.
Bunun için sizlere 2 farklı yol göstereceğim ;
1- useLibrary() ile Apache kütüphanelerinin çekilmesi
Uygulamanızın build.gradle
dosyasında
useLibrary 'org.apache.http.legacy'
kullanarak , Apache
kütüphanelerini kullanmaya devam edebilirsiniz. Örnek bir kullanım şu şekilde olmalıdır ;
android { compileSdkVersion 23 buildToolsVersion '23.0.0' useLibrary 'org.apache.http.legacy' defaultConfig { applicationId 'com.happycoderz.ipexample' minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName '1.0' } }
Bu kullanımda dikkat etmemiz gereken bir diğer hususta uygulamamızın ana dosyasında
Gradle
versiyonumuzun minimum 1.5.0 olmasıdır.
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' } }
2- Normal bir 3rd party kütüphane gibi eklemek
Bu metod benim de tercih ettiğim ve diğerine göre daha sancısız olan bir metoddur. Uygulamanızın build.gradle
dosyasına herhangi bir kütüphaneyi ekler gibi
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
eklemeniz, gerekli tüm Apache
classlarını kullanabilmeniz için yeterli olacaktır.
İpucunu yararlı bulduğunuzu ümit ediyorum, diğer derslerimize de göz atmayı unutmayınız.