[英]Get host ip android
試圖做我的作業,但無法弄清楚。
我正在制作一個可以在與我的家庭wifi 24/7保持連接的電話上運行的應用程序。 我希望它檢測主機IP並跟蹤任何更改,但是我無法使代碼正常工作。 我找到了InetAddress類,這似乎是我所需要的,但是下面的代碼引發了一個通用異常“事情不好了”,我不知道如何固定它,因為它不是方法拋出的UnknownHostException。文檔:
public void getIP(View view) {
isNetOK();
getLocalIpAddress();
}
public void isNetOK() {
//get connectivity manager
connMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//call getActiveNetworkInfo method of connMan, returns a networkInfo object
NetworkInfo netInfo = connMan.getActiveNetworkInfo();
if (netInfo !=null && netInfo.isConnected()) {
setViewText("net_stat", "Network Connected");
netOK = true;
} else {
setViewText("net_stat", "Network Unavailable");
}
}
public void getLocalIpAddress() {
isNetOK();
if (netOK) {
try{
InetAddress ownIP = InetAddress.getLocalHost();
localIP = ownIP.toString();
}catch (UnknownHostException e){
setViewText("ip_view", "Error: unknown host");
} catch (Exception ex) {
setViewText("ip_view", "Something bad is going wrong");
}
}
isNetOK可以正常工作,我已經將它單獨命名了一天左右。
有人可以指出為什么該代碼不起作用的方法嗎? 這是最好的方法嗎? 我的目標是將家中的服務器與我在GoDaddy獲得的域名鏈接起來。 我的ip地址是動態的,但每隔幾個月或停電時才更改。 我想要一個可以不時檢查一次IP(6小時?)的應用程序,並通知我它是否更改,以便我可以更新DNS。 我知道,駭客,緩慢等等,但實際上它只是供私人使用,看看我是否可以使它工作。
編輯1
我在下面的budcopter答案中嘗試了該方法,最后得到了一些進行一些更改的代碼:
public void getLocalIpAddress() {
if (netOK) {
try{
WifiManager WiMan = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = WiMan.getConnectionInfo();
int address = wifiInfo.getIpAddress();
String ipAddress = (String) Integer.toString(address);
setViewText("ip_view", ipAddress);
} /*catch (UnknownHostException e){
setViewText("ip_view", "Error: unknown host");
} */catch (Exception ex) {
setViewText("ip_view", "Something bad is going wrong");
}
}
這將返回一個有效的int,十位數字長。 但是,當我與whatismyip.com進行核對時,它們甚至差一點也不相同。 手機的LAN地址是192.168.1.110,我們的外部IP是75.xx.xx.xxx,返回的int是1812048064。即使我關閉WiFi無線電的電源,它也會返回相同的數字。 知道WifiManager系統服務給我多少電話嗎?
另外,如果禁用了WiFi,我將添加一項檢查以防止請求地址,但這在當時是微不足道的。
嘗試這個:
public void getLocalIpAddress() {
// remove it, duplicated call
// isNetOK();
if (netOK) {
try{
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
int address = info.getIpAddress();
String ipAddress = Formatter.formatIpAddress(address);
setViewText("ip_view", ipAddress);
} catch (UnknownHostException e){
setViewText("ip_view", "Error: unknown host");
} catch (Exception ex) {
setViewText("ip_view", "Something bad is going wrong");
}
}
並且不要忘記androidmainfest.xml中的userpermisson:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.