<uses-permission android:required="true" android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:required="true" android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:required="true" android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:required="true" android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:required="true" android:name="android.permission.INTERNET"/>
<uses-permission android:required="true" android:name="android.permission.ACCESS_NETWORK_STATE"/>
<?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:orientation="vertical"
tools:context=".MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_wifi"
android:text="ON">
</Button>
<TextView
android:id="@+id/txt_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="тут будет статус"
android:text=""/>
<Button
android:id="@+id/btn_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="поиск">
</Button>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/list_device">
</ListView>
</LinearLayout>
public class MainActivity extends AppCompatActivity {
private final String MAIN_TAG = "MAIN_TAG";
private final IntentFilter intentFilter = new IntentFilter();
private WiFiDirectBroadcastReceiver receiver;
WifiP2pManager.Channel channel;
WifiP2pManager p2pManager;
WifiManager wifiManager;
private Button searchButton, wifiButton;
private TextView statusTextView;
private ListView listView;
private List<WifiP2pDevice> peers = new ArrayList<WifiP2pDevice>();
String[] deviceNameArray;
WifiP2pDevice[] deviceArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
exqListener();
}
WifiP2pManager.ConnectionInfoListener connectionInfoListener = new WifiP2pManager.ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(WifiP2pInfo info) {
final InetAddress inetAddress = info.groupOwnerAddress;
if (info.groupFormed && info.isGroupOwner) {
setStatus("Host");
} else {
setStatus("Client");
}
}
};
private void init() {
statusTextView = findViewById(R.id.txt_status);
searchButton = findViewById(R.id.btn_search);
wifiButton = findViewById(R.id.btn_wifi);
listView = findViewById(R.id.list_device);
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiButton.setText(!wifiManager.isWifiEnabled() ? "ON" : "OFF");
p2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
channel = p2pManager.initialize(this, getMainLooper(), null);
intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
}
WifiP2pManager.PeerListListener peerListListener = new WifiP2pManager.PeerListListener() {
@Override
public void onPeersAvailable(WifiP2pDeviceList peersList) {
if (!peersList.getDeviceList().equals(peers)) {
peers.clear();
peers.addAll(peersList.getDeviceList());
deviceNameArray = new String[peersList.getDeviceList().size()];
deviceArray = new WifiP2pDevice[peersList.getDeviceList().size()];
int ind = 0;
for (WifiP2pDevice device : peersList.getDeviceList()) {
deviceNameArray[ind] = device.deviceName;
deviceArray[ind] = device;
ind++;
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, deviceNameArray);
listView.setAdapter(adapter);
}
if (peers.size() == 0) {
Toast.makeText(getApplicationContext(), "No device found", Toast.LENGTH_LONG).show();
}
}
};
private void exqListener() {
wifiButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
wifiButton.setText("ON");
} else {
wifiManager.setWifiEnabled(true);
wifiButton.setText("OFF");
}
}
});
searchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
p2pManager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
statusTextView.setText("Discover is started");
}
@Override
public void onFailure(int reason) {
statusTextView.setText("Discover started failed");
}
});
}
});
}
@Override
public void onResume() {
super.onResume();
receiver = new WiFiDirectBroadcastReceiver(p2pManager, channel, this);
registerReceiver(receiver, intentFilter);
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
public void setStatus(String text) {
statusTextView.setText(text);
}
}
public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {
private String RECEIVER_TAG = "RECEIVER_TAG";
private WifiManager wifiManager;
private WifiP2pManager wifiP2pManager;
private WifiP2pManager.Channel channel;
private MainActivity activity;
private WifiP2pManager.PeerListListener peerListListener;
public WiFiDirectBroadcastReceiver(WifiP2pManager manager, WifiP2pManager.Channel channel, MainActivity activity) {
this.channel = channel;
this.activity = activity;
this.wifiP2pManager = manager;
this.peerListListener = peerListListener;
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
MainActivity activity = (MainActivity) context;
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
// Определите, включен ли режим Wi-Fi P2P или нет, оповещение ативити
int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
Toast.makeText(context, "Wifi on", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(context, "Wifi off", Toast.LENGTH_LONG).show();
}
} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
// Список сверстников изменился! Наверное, нам следует что-то предпринять.
if (wifiP2pManager != null) {
wifiP2pManager.requestPeers(channel, activity.peerListListener);
}
} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
// Состояние соединения изменилось! Наверное, нам следует что-то предпринять.
} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
}
}
}