Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java isReachable()在android中返回false_Java_Android_Mac Address_Hotspot - Fatal编程技术网

Java isReachable()在android中返回false

Java isReachable()在android中返回false,java,android,mac-address,hotspot,Java,Android,Mac Address,Hotspot,嗯,当我的手机作为热点工作时,我需要检测所有连接到我手机的设备并找到它们的MAC地址。我写了这样的东西: public void getListOfConnectedDevice() { Thread thread = new Thread(new Runnable() { @Override public void run() { BufferedReader br = null; boolean isF

嗯,当我的手机作为热点工作时,我需要检测所有连接到我手机的设备并找到它们的MAC地址。我写了这样的东西:

public void getListOfConnectedDevice() {
    Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {
            BufferedReader br = null;
            boolean isFirstLine = true;

            try {
                br = new BufferedReader(new FileReader("/proc/net/arp"));
                String line;

                while ((line = br.readLine()) != null) {
                    if (isFirstLine) {
                        isFirstLine = false;
                        continue;
                    }

                    String[] splitted = line.split(" +");

                    if (splitted != null && splitted.length >= 4) {

                        String ipAddress = splitted[0];
                        String macAddress = splitted[3];

                       boolean isReachable = InetAddress.getByName(
                                splitted[0]).isReachable(300);// this is network call so we cant do that on UI thread, so i take background thread.
                        Log.d(TAG, "ip: " + splitted[0]);
                        Log.d(TAG, "isReachable: " + isReachable);
                        if (isReachable) {
                            Log.d("Device Information", ipAddress + " : "
                                    + macAddress);
                            macAddresses.add(macAddress); //My List<String>
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    });
    thread.start();
}
public void getListOfConnectedDevice(){
Thread Thread=新线程(new Runnable(){
@凌驾
公开募捐{
BufferedReader br=null;
布尔值isFirstLine=true;
试一试{
br=新的BufferedReader(新的文件读取器(“/proc/net/arp”);
弦线;
而((line=br.readLine())!=null){
如果(第一行){
isFirstLine=false;
继续;
}
String[]splitted=line.split(“+”);
如果(拆分!=null&&splitted.length>=4){
字符串ipAddress=已拆分[0];
字符串macAddress=splitted[3];
布尔值isReachable=InetAddress.getByName(
已拆分[0]).isReachable(300);//这是网络调用,所以我们无法在UI线程上执行此操作,所以我使用后台线程。
Log.d(标签,“ip:+拆分的[0]);
Log.d(标签“isReachable:+isReachable”);
如果(isReachable){
Log.d(“设备信息”,ipAddress+”:“
+macAddress);
macAddress.add(macAddress);//我的列表
}
}
}
}捕获(例外e){
e、 printStackTrace();
}最后{
试一试{
br.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
});
thread.start();
}
但是
boolean isReachable=InetAddress.getByName(

已拆分[0])。isReachable(300)仅在设备连接或断开连接时返回false。我找不到任何信息来找到解决方案。或者还有其他解决办法吗?(适用于非根目录手机)

好吧,我发现android会将设备的MAC地址保留大约10分钟(在不同的设备上-不同的时间),唯一的方法是使用ADB shell命令清除该列表,但是!它只在根设备上工作

但此代码可以帮助您(并非适用于所有设备):

public void getListOfConnectedDevice() {
    final Thread thread = new Thread(new Runnable() {

        @Override
        public void run() {
            macAddresses.clear();
            BufferedReader br = null;
            boolean isFirstLine = true;
            try {

                br = new BufferedReader(new FileReader("/proc/net/arp"));
                String line;

                while ((line = br.readLine()) != null) {
                    if (isFirstLine) {
                        isFirstLine = false;
                        continue;
                    }

                    String[] splitted = line.split(" +");

                    if (splitted != null && splitted.length >= 4) {

                        String ipAddress = splitted[0];
                        String macAddress = splitted[3];

                        Node node = new Node(ipAddress, macAddress);
                        boolean isReachable = node.isReachable;
                        Log.d(TAG, "isReachable: " + isReachable);
                        if (isReachable) {
                            Log.d("Device Information", ipAddress + " : "
                                    + macAddress);
                            macAddresses.add(macAddress);
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    });
    thread.start();
}