This example, scan a range of IPs, to check if it is reachable, in turn to discover connected devices in the same network.
MainActivity.java
package com.blogspot.android_er.androidipscanner;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private Button btnScan;
private ListView listViewIp;
ArrayList<String> ipList;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnScan = (Button)findViewById(R.id.scan);
listViewIp = (ListView)findViewById(R.id.listviewip);
ipList = new ArrayList();
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, ipList);
listViewIp.setAdapter(adapter);
btnScan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new ScanIpTask().execute();
}
});
}
private class ScanIpTask extends AsyncTask<Void, String, Void>{
/*
Scan IP 192.168.1.100~192.168.1.110
you should try different timeout for your network/devices
*/
static final String subnet = "192.168.1.";
static final int lower = 100;
static final int upper = 110;
static final int timeout = 5000;
@Override
protected void onPreExecute() {
ipList.clear();
adapter.notifyDataSetInvalidated();
Toast.makeText(MainActivity.this, "Scan IP...", Toast.LENGTH_LONG).show();
}
@Override
protected Void doInBackground(Void... params) {
for (int i = lower; i <= upper; i++) {
String host = subnet + i;
try {
InetAddress inetAddress = InetAddress.getByName(host);
if (inetAddress.isReachable(timeout)){
publishProgress(inetAddress.toString());
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
ipList.add(values[0]);
adapter.notifyDataSetInvalidated();
Toast.makeText(MainActivity.this, values[0], Toast.LENGTH_LONG).show();
}
@Override
protected void onPostExecute(Void aVoid) {
Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_LONG).show();
}
}
}
layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:autoLink="web"
android:text="http://android-er.blogspot.com/"
android:textStyle="bold" />
<Button
android:id="@+id/scan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Scan"/>
<ListView
android:id="@+id/listviewip"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Permission of "android.permission.INTERNET" is needed in AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
Related:
- Java version run on Raspberry Pi - scan connected IP in the same network
This is quite useful. Could you please help me to get mac address also of devices.
ReplyDeletehey guys,
ReplyDeleteim working on application similar to this but i want to add checkbox appear beside the ip addresses, such that when this checkbox just mark the device of this ip address well have no internet or network connection which you can mark more than one checkbox.
please can you help me for these two steps i need to finish my project ?
thanks at all
Configure the router settings using default ip address to 192.168.l.254 login
ReplyDeleteIt can not detect the laptop's IP... How can I get the laptop's IP also?
ReplyDelete