He hecho un servicio que en teoría tendría que mirar la ip interna, cada cierto tiempo, y mandarla a una web (incrustado en la dirección como GET).
Tengo este código, y funciona, pero al cabo de un rato, deja de funcionar, aunque el servicio no se para.
He probado barias opciones, pero no consigo que funcione siempre.
No siempre se para al mismo tiempo, a veces puede estar 3 horas funcionando, y otras 1.
Alguien sabe que le pasa, y donde está el fallo. Gracias.
package foo.bar;
import java.io.IOException;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Enumeration;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class Servicio extends Service{
HttpClient client = new DefaultHttpClient();
String ipactual = getLocalIpAddress();
String ipanterior = "noip";
long numveces = 0;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate(){
super.onCreate();
}
@Override
public void onStart(final Intent intent, final int startId){
Timer timer;
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
mandarurl();
}
}, 0, 60000);
}
public String getLocalIpAddress() {
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())
return inetAddress.getHostAddress().toString();
}
}
} catch (SocketException ex) {}
return null;
}
/*public static String getLocalIpAddress() {
try {
Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
while(en.hasMoreElements()) {
NetworkInterface intf = en.nextElement();
Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
while(enumIpAddr.hasMoreElements()) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress())
return inetAddress.getHostAddress().toString();
}
}
} catch (SocketException ex) {
Log.e("getLocalIpAddress", ex.toString());
}
return "noip";
}
*/
public void mandarurl(){
ipactual = getLocalIpAddress();
String urlString = "http://web.com/ip.php?ip=" + ipactual + "num." + numveces;
URL url = null;
try {
url = new URL(urlString);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
URLConnection conn = null;
try {
conn = url.openConnection();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
conn.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
numveces = numveces + 1;
ipanterior = ipactual;
}
}