From b2df26e13bb84a54cdff898e739442f64c329253 Mon Sep 17 00:00:00 2001 From: edr Date: Wed, 13 May 2020 21:36:33 +0200 Subject: [PATCH] List all listening network interfaces --- README.md | 2 +- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 1 + .../childmonitor/MonitorActivity.java | 56 +++++-- app/src/main/res/layout/activity_monitor.xml | 142 ++++++++++-------- app/src/main/res/values-de/strings.xml | 5 +- app/src/main/res/values-ja/strings.xml | 3 +- app/src/main/res/values-nl/strings.xml | 5 +- app/src/main/res/values/strings.xml | 5 +- 9 files changed, 134 insertions(+), 87 deletions(-) diff --git a/README.md b/README.md index a5554a4..d318423 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ device and receive an audio stream. The project is a fork of _Protect Baby Monitor_ which is declared as "on hiatus" by its developer. -_Child Monitor_ works on Android 4.4 (KitKat) and newer, i.e. Android SDK 19. +_Child Monitor_ works on Android 5.0 (Lollipop) and newer, i.e. Android SDK 21. The current version of _Child Monitor_ is rudimentary at best. It is capable of successfully advertising itself on the network, allows clients to connect, diff --git a/app/build.gradle b/app/build.gradle index a702243..223756b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { defaultConfig { applicationId "child.monitor" - minSdkVersion 19 + minSdkVersion 21 targetSdkVersion 26 versionCode 4 versionName "0.4" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a267d4b..f7404c9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ android:versionCode="2" android:versionName="0.2" > + diff --git a/app/src/main/java/de/rochefort/childmonitor/MonitorActivity.java b/app/src/main/java/de/rochefort/childmonitor/MonitorActivity.java index fa4b3d0..74acab0 100644 --- a/app/src/main/java/de/rochefort/childmonitor/MonitorActivity.java +++ b/app/src/main/java/de/rochefort/childmonitor/MonitorActivity.java @@ -18,20 +18,24 @@ package de.rochefort.childmonitor; import java.io.IOException; import java.io.OutputStream; +import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import android.app.Activity; import android.content.Context; import android.media.AudioRecord; import android.media.MediaRecorder; +import android.net.ConnectivityManager; +import android.net.LinkAddress; +import android.net.Network; +import android.net.NetworkInfo; import android.net.nsd.NsdManager; import android.net.nsd.NsdServiceInfo; -import android.net.wifi.WifiInfo; -import android.net.wifi.WifiManager; import android.os.Bundle; -import android.text.format.Formatter; import android.util.Log; import android.widget.TextView; @@ -138,23 +142,47 @@ public class MonitorActivity extends Activity { } }).start(); - final TextView addressText = (TextView) findViewById(R.id.address); + final TextView addressText = findViewById(R.id.address); - // Use the application context to get WifiManager, to avoid leak before Android 5.1 - final WifiManager wifiManager = - (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); - final WifiInfo info = wifiManager.getConnectionInfo(); - final int address = info.getIpAddress(); - if(address != 0) { - @SuppressWarnings("deprecation") - final String ipAddress = Formatter.formatIpAddress(address); - addressText.setText(ipAddress); + List listenAddresses = getListenAddresses(); + if(!listenAddresses.isEmpty()) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < listenAddresses.size(); i++) { + String listenAddress = listenAddresses.get(i); + sb.append(listenAddress); + if (i != listenAddresses.size() -1) { + sb.append("\n\n"); + } + } + addressText.setText(sb.toString()); } else { - addressText.setText(R.string.wifiNotConnected); + addressText.setText(R.string.notConnected); } } + private List getListenAddresses() { + String service = Context.CONNECTIVITY_SERVICE; + ConnectivityManager cm = (ConnectivityManager)getSystemService(service); + List listenAddresses = new ArrayList<>(); + if (cm != null) { + for (Network network : cm.getAllNetworks()) { + NetworkInfo networkInfo = cm.getNetworkInfo(network); + boolean connected = networkInfo.isConnected(); + if (connected) { + List linkAddresses = cm.getLinkProperties(network).getLinkAddresses(); + for (LinkAddress linkAddress : linkAddresses) { + InetAddress address = linkAddress.getAddress(); + if (!address.isLinkLocalAddress() && !address.isLoopbackAddress()) { + listenAddresses.add(address.getHostAddress() + " (" + networkInfo.getTypeName() + ")"); + } + } + } + } + } + return listenAddresses; + } + @Override protected void onDestroy() { Log.i(TAG, "ChildMonitor stop"); diff --git a/app/src/main/res/layout/activity_monitor.xml b/app/src/main/res/layout/activity_monitor.xml index 6a1c3c0..c8de77c 100644 --- a/app/src/main/res/layout/activity_monitor.xml +++ b/app/src/main/res/layout/activity_monitor.xml @@ -20,76 +20,98 @@ android:textSize="25sp" /> + android:layout_width="match_parent" + android:layout_height="15dip" /> - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 9553492..6c4d3fe 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -20,10 +20,9 @@ Verbunden mit: Getrennt Lausche... - Adresse: + Adressen: Port: - Adresse und Port zum Koppeln mit Eltern - Nicht mit WLAN-Netzwerk verbunden + Mit keinem Netzwerk verbunden Gib die IP-Adresse und den Port des Kind-Gerätes ein und klicke auf Verbinden Verbinden 192.168.1.2 diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 912abb6..a0c8134 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -22,8 +22,7 @@ リスニング中... アドレス: ポート: - 親機がペアにする先のアドレスとポート - Wi-Fi ネットワークに接続されていません + ネットワークに接続されていません 子機の IP アドレスとポートを入力して、接続をクリックしてください 接続 192.168.1.2 diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 370c4e4..9537fc4 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -20,10 +20,9 @@ Verbonden met: Verbinding verbroken Bezig met luisteren... - Adres: + Adressen: Poort: - Adres en poort waar de ouder mee moet verbinden - Niet verbonden met een Wi-Fi-netwerk + Niet verbonden met een netwerk Voer het IP-adres en de poort van een kindapparaat in en druk op Verbinden Verbinden 192.168.1.2 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7ee29d5..e2c09d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,10 +20,9 @@ Connected To: Disconnected Listening... - Address: + Addresses: Port: - Address and port that parent must pair to - Not connected to a Wi-Fi network + Not connected to any network Enter the IP Address and port of a child and click Connect Connect 192.168.1.2