List all listening network interfaces
This commit is contained in:
@@ -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.
|
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
|
The current version of _Child Monitor_ is rudimentary at best. It is capable
|
||||||
of successfully advertising itself on the network, allows clients to connect,
|
of successfully advertising itself on the network, allows clients to connect,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ android {
|
|||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "child.monitor"
|
applicationId "child.monitor"
|
||||||
minSdkVersion 19
|
minSdkVersion 21
|
||||||
targetSdkVersion 26
|
targetSdkVersion 26
|
||||||
versionCode 4
|
versionCode 4
|
||||||
versionName "0.4"
|
versionName "0.4"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
android:versionCode="2"
|
android:versionCode="2"
|
||||||
android:versionName="0.2" >
|
android:versionName="0.2" >
|
||||||
|
|
||||||
|
<uses-permission android:required="true" android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:required="true" android:name="android.permission.INTERNET"/>
|
<uses-permission android:required="true" android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:required="true" android:name="android.permission.RECORD_AUDIO"/>
|
<uses-permission android:required="true" android:name="android.permission.RECORD_AUDIO"/>
|
||||||
<uses-permission android:required="true" android:name="android.permission.ACCESS_WIFI_STATE"/>
|
<uses-permission android:required="true" android:name="android.permission.ACCESS_WIFI_STATE"/>
|
||||||
|
|||||||
@@ -18,20 +18,24 @@ package de.rochefort.childmonitor;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.net.InetAddress;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.AudioRecord;
|
import android.media.AudioRecord;
|
||||||
import android.media.MediaRecorder;
|
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.NsdManager;
|
||||||
import android.net.nsd.NsdServiceInfo;
|
import android.net.nsd.NsdServiceInfo;
|
||||||
import android.net.wifi.WifiInfo;
|
|
||||||
import android.net.wifi.WifiManager;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.format.Formatter;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@@ -138,23 +142,47 @@ public class MonitorActivity extends Activity {
|
|||||||
}
|
}
|
||||||
}).start();
|
}).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
|
List<String> listenAddresses = getListenAddresses();
|
||||||
final WifiManager wifiManager =
|
if(!listenAddresses.isEmpty()) {
|
||||||
(WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
|
StringBuilder sb = new StringBuilder();
|
||||||
final WifiInfo info = wifiManager.getConnectionInfo();
|
for (int i = 0; i < listenAddresses.size(); i++) {
|
||||||
final int address = info.getIpAddress();
|
String listenAddress = listenAddresses.get(i);
|
||||||
if(address != 0) {
|
sb.append(listenAddress);
|
||||||
@SuppressWarnings("deprecation")
|
if (i != listenAddresses.size() -1) {
|
||||||
final String ipAddress = Formatter.formatIpAddress(address);
|
sb.append("\n\n");
|
||||||
addressText.setText(ipAddress);
|
}
|
||||||
|
}
|
||||||
|
addressText.setText(sb.toString());
|
||||||
} else {
|
} else {
|
||||||
addressText.setText(R.string.wifiNotConnected);
|
addressText.setText(R.string.notConnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<String> getListenAddresses() {
|
||||||
|
String service = Context.CONNECTIVITY_SERVICE;
|
||||||
|
ConnectivityManager cm = (ConnectivityManager)getSystemService(service);
|
||||||
|
List<String> listenAddresses = new ArrayList<>();
|
||||||
|
if (cm != null) {
|
||||||
|
for (Network network : cm.getAllNetworks()) {
|
||||||
|
NetworkInfo networkInfo = cm.getNetworkInfo(network);
|
||||||
|
boolean connected = networkInfo.isConnected();
|
||||||
|
if (connected) {
|
||||||
|
List<LinkAddress> 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
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
Log.i(TAG, "ChildMonitor stop");
|
Log.i(TAG, "ChildMonitor stop");
|
||||||
|
|||||||
@@ -20,76 +20,98 @@
|
|||||||
android:textSize="25sp" />
|
android:textSize="25sp" />
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="15dip" />
|
android:layout_height="15dip" />
|
||||||
|
|
||||||
<TextView
|
<ScrollView
|
||||||
android:id="@+id/serviceTitle"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:fillViewport="true">
|
||||||
android:text="@string/serviceTitle"
|
|
||||||
android:textSize="20sp" />
|
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:id="@+id/textService"
|
android:id="@+id/LinearLayout2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/loading"
|
android:orientation="vertical"
|
||||||
android:textSize="20sp" />
|
android:keepScreenOn="true"
|
||||||
|
tools:context="de.rochefort.childmonitor.MonitorActivity" >
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/serviceDescription"
|
android:id="@+id/serviceTitle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/serviceDescription" />
|
android:text="@string/serviceTitle"
|
||||||
|
android:textSize="20sp" />
|
||||||
|
|
||||||
<Space
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/textService"
|
||||||
android:layout_height="15dip" />
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/loading"
|
||||||
|
android:textSize="20sp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/addressTitle"
|
android:id="@+id/serviceDescription"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/addressTitle"
|
android:text="@string/serviceDescription" />
|
||||||
android:textSize="20sp" />
|
|
||||||
|
|
||||||
<TextView
|
<Space
|
||||||
android:id="@+id/address"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="15dip" />
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text=""
|
|
||||||
android:textSize="20sp"/>
|
|
||||||
|
|
||||||
<TextView
|
<Space
|
||||||
android:id="@+id/portTitle"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="15dip" />
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/portTitle"
|
|
||||||
android:textSize="20sp" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/port"
|
android:id="@+id/portTitle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/loading"
|
android:text="@string/portTitle"
|
||||||
android:textSize="20sp"/>
|
android:textSize="20sp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/addressDescription"
|
android:id="@+id/port"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/addressDescription" />
|
android:text="@string/loading"
|
||||||
|
android:textSize="20sp"/>
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="15dip" />
|
android:layout_height="15dip" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/textStatus"
|
android:id="@+id/addressTitle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text=""
|
android:text="@string/addressTitle"
|
||||||
android:textSize="20sp" />
|
android:textSize="20sp" />
|
||||||
|
|
||||||
|
<Space
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="15dip" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/address"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text=""
|
||||||
|
android:textSize="15sp"/>
|
||||||
|
|
||||||
|
<Space
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="15dip" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textStatus"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text=""
|
||||||
|
android:textSize="20sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -20,10 +20,9 @@
|
|||||||
<string name="connectedTo">Verbunden mit:</string>
|
<string name="connectedTo">Verbunden mit:</string>
|
||||||
<string name="disconnected">Getrennt</string>
|
<string name="disconnected">Getrennt</string>
|
||||||
<string name="listening">Lausche...</string>
|
<string name="listening">Lausche...</string>
|
||||||
<string name="addressTitle">Adresse:</string>
|
<string name="addressTitle">Adressen:</string>
|
||||||
<string name="portTitle">Port:</string>
|
<string name="portTitle">Port:</string>
|
||||||
<string name="addressDescription">Adresse und Port zum Koppeln mit Eltern</string>
|
<string name="notConnected">Mit keinem Netzwerk verbunden</string>
|
||||||
<string name="wifiNotConnected">Nicht mit WLAN-Netzwerk verbunden</string>
|
|
||||||
<string name="enterAddressInstructions">Gib die IP-Adresse und den Port des Kind-Gerätes ein und klicke auf Verbinden</string>
|
<string name="enterAddressInstructions">Gib die IP-Adresse und den Port des Kind-Gerätes ein und klicke auf Verbinden</string>
|
||||||
<string name="connect">Verbinden</string>
|
<string name="connect">Verbinden</string>
|
||||||
<string name="exampleAddress">192.168.1.2</string>
|
<string name="exampleAddress">192.168.1.2</string>
|
||||||
|
|||||||
@@ -22,8 +22,7 @@
|
|||||||
<string name="listening">リスニング中...</string>
|
<string name="listening">リスニング中...</string>
|
||||||
<string name="addressTitle">アドレス:</string>
|
<string name="addressTitle">アドレス:</string>
|
||||||
<string name="portTitle">ポート:</string>
|
<string name="portTitle">ポート:</string>
|
||||||
<string name="addressDescription">親機がペアにする先のアドレスとポート</string>
|
<string name="notConnected">ネットワークに接続されていません</string>
|
||||||
<string name="wifiNotConnected">Wi-Fi ネットワークに接続されていません</string>
|
|
||||||
<string name="enterAddressInstructions">子機の IP アドレスとポートを入力して、接続をクリックしてください</string>
|
<string name="enterAddressInstructions">子機の IP アドレスとポートを入力して、接続をクリックしてください</string>
|
||||||
<string name="connect">接続</string>
|
<string name="connect">接続</string>
|
||||||
<string name="exampleAddress">192.168.1.2</string>
|
<string name="exampleAddress">192.168.1.2</string>
|
||||||
|
|||||||
@@ -20,10 +20,9 @@
|
|||||||
<string name="connectedTo">Verbonden met:</string>
|
<string name="connectedTo">Verbonden met:</string>
|
||||||
<string name="disconnected">Verbinding verbroken</string>
|
<string name="disconnected">Verbinding verbroken</string>
|
||||||
<string name="listening">Bezig met luisteren...</string>
|
<string name="listening">Bezig met luisteren...</string>
|
||||||
<string name="addressTitle">Adres:</string>
|
<string name="addressTitle">Adressen:</string>
|
||||||
<string name="portTitle">Poort:</string>
|
<string name="portTitle">Poort:</string>
|
||||||
<string name="addressDescription">Adres en poort waar de ouder mee moet verbinden</string>
|
<string name="notConnected">Niet verbonden met een netwerk</string>
|
||||||
<string name="wifiNotConnected">Niet verbonden met een Wi-Fi-netwerk</string>
|
|
||||||
<string name="enterAddressInstructions">Voer het IP-adres en de poort van een kindapparaat in en druk op Verbinden</string>
|
<string name="enterAddressInstructions">Voer het IP-adres en de poort van een kindapparaat in en druk op Verbinden</string>
|
||||||
<string name="connect">Verbinden</string>
|
<string name="connect">Verbinden</string>
|
||||||
<string name="exampleAddress">192.168.1.2</string>
|
<string name="exampleAddress">192.168.1.2</string>
|
||||||
|
|||||||
@@ -20,10 +20,9 @@
|
|||||||
<string name="connectedTo">Connected To:</string>
|
<string name="connectedTo">Connected To:</string>
|
||||||
<string name="disconnected">Disconnected</string>
|
<string name="disconnected">Disconnected</string>
|
||||||
<string name="listening">Listening...</string>
|
<string name="listening">Listening...</string>
|
||||||
<string name="addressTitle">Address:</string>
|
<string name="addressTitle">Addresses:</string>
|
||||||
<string name="portTitle">Port:</string>
|
<string name="portTitle">Port:</string>
|
||||||
<string name="addressDescription">Address and port that parent must pair to</string>
|
<string name="notConnected">Not connected to any network</string>
|
||||||
<string name="wifiNotConnected">Not connected to a Wi-Fi network</string>
|
|
||||||
<string name="enterAddressInstructions">Enter the IP Address and port of a child and click Connect</string>
|
<string name="enterAddressInstructions">Enter the IP Address and port of a child and click Connect</string>
|
||||||
<string name="connect">Connect</string>
|
<string name="connect">Connect</string>
|
||||||
<string name="exampleAddress">192.168.1.2</string>
|
<string name="exampleAddress">192.168.1.2</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user