Added option to use local IP address

This commit is contained in:
M66B
2019-02-21 20:13:11 +01:00
parent 77e38e0a94
commit ba4e8df7ff
9 changed files with 1648 additions and 9 deletions

View File

@@ -34,6 +34,8 @@ import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.LinkAddress;
import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
@@ -72,6 +74,8 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DateFormat;
@@ -731,6 +735,43 @@ public class Helper {
return filename.substring(index + 1);
}
static InetAddress getLocalIp(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M)
return null;
Network active = cm.getActiveNetwork();
if (active == null)
return null;
NetworkInfo ani = cm.getNetworkInfo(active);
if (ani == null || !ani.isConnected())
return null;
NetworkCapabilities caps = cm.getNetworkCapabilities(active);
if (caps == null)
return null;
if (!caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN))
return null;
LinkProperties props = cm.getLinkProperties(active);
if (props == null)
return null;
List<LinkAddress> addresses = props.getLinkAddresses();
if (addresses == null || addresses.size() == 0)
return null;
// Prefer IPv4
for (LinkAddress address : addresses)
if (address.getAddress() instanceof Inet4Address)
return address.getAddress();
return addresses.get(0).getAddress();
}
static Boolean isMetered(Context context, boolean log) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);