diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java index 58b0abe4..b44bf8a6 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java +++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java @@ -269,15 +269,14 @@ public class CaptureService extends VpnService implements Runnable { // Map network interfaces mIfIndexToName = new SparseArray<>(); - try { - Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); - while(ifaces.hasMoreElements()) { - NetworkInterface iface = ifaces.nextElement(); - Log.d(TAG, "ifidx " + iface.getIndex() + " -> " + iface.getName()); - mIfIndexToName.put(iface.getIndex(), iface.getName()); - } - } catch (SocketException ignored) {} + Enumeration ifaces = Utils.getNetworkInterfaces(); + while(ifaces.hasMoreElements()) { + NetworkInterface iface = ifaces.nextElement(); + + Log.d(TAG, "ifidx " + iface.getIndex() + " -> " + iface.getName()); + mIfIndexToName.put(iface.getIndex(), iface.getName()); + } if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ConnectivityManager cm = (ConnectivityManager) getSystemService(Service.CONNECTIVITY_SERVICE); diff --git a/app/src/main/java/com/emanuelef/remote_capture/Utils.java b/app/src/main/java/com/emanuelef/remote_capture/Utils.java index 5ccb6822..bde22970 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Utils.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Utils.java @@ -109,6 +109,7 @@ import java.net.Inet4Address; import java.net.InetAddress; import java.net.InterfaceAddress; import java.net.NetworkInterface; +import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.URL; import java.net.UnknownHostException; @@ -124,9 +125,11 @@ import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; +import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -1681,4 +1684,18 @@ public class Utils { else return PrivateDnsMode.DISABLED; } + + public static @NonNull Enumeration getNetworkInterfaces() { + try { + Enumeration ifs = NetworkInterface.getNetworkInterfaces(); + if(ifs != null) + return ifs; + } catch (SocketException | NullPointerException e) { + // NullPointerException can be thrown on Android < 31 with virtual interface without a + // parent interface + e.printStackTrace(); + } + + return Collections.enumeration(new ArrayList<>()); + } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/prefs/SettingsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/prefs/SettingsActivity.java index 18524ccd..84767740 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/prefs/SettingsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/prefs/SettingsActivity.java @@ -233,7 +233,7 @@ public class SettingsActivity extends BaseActivity implements PreferenceFragment values.add("any"); try { - Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); + Enumeration ifaces = Utils.getNetworkInterfaces(); while (ifaces.hasMoreElements()) { NetworkInterface iface = ifaces.nextElement();