私が書いているAndroidアプリには2つの問題があります。
からローカル arp テーブルを読み取り、/proc/net/arp
IP と対応する MAC アドレスをハッシュ マップに保存します。私の機能を参照してください。正常に動作しています。
/**
* Extract and save ip and corresponding MAC address from arp table in HashMap
*/
public Map<String, String> createArpMap() throws IOException {
checkMapARP.clear();
BufferedReader localBufferdReader = new BufferedReader(new FileReader(new File("/proc/net/arp")));
String line = "";
while ((line = localBufferdReader.readLine()) != null) {
String[] ipmac = line.split("[ ]+");
if (!ipmac[0].matches("IP")) {
String ip = ipmac[0];
String mac = ipmac[3];
if (!checkMapARP.containsKey(ip)) {
checkMapARP.put(ip, mac);
}
}
}
return Collections.unmodifiableMap(checkMapARP);
}
最初の問題:
私もブロードキャストレシーバーを使用しています。アプリが State を受け取る
WifiManager.NETWORK_STATE_CHANGED_ACTION
と、ゲートウェイへの接続が確立されているかどうかを確認します。true の場合、関数を呼び出して arp テーブルを読み取ります。ただし、この段階では、システムはまだ arp テーブルを構築していません。接続状態を受信すると、arp テーブルが空のままになることがあります。誰でもこれを解決するためのアイデアを持っていますか?
2番目の問題:
ゲートウェイの IP アドレスと MAC アドレスを永続的な方法で保存したいと考えています。現在、これには共有設定を使用しています。内部ストレージに書き込んだ方が良いのでしょうか?
任意のヒント?