Wi-Fi Direct (Wi-Fi P2P) डिवाइस को पारंपरिक एक्सेस पॉइंट या इंटरनेट कनेक्शन के बिना सीधे एक-दूसरे से कनेक्ट करने की अनुमति देता है। यह ट्यूटोरियल WifiP2pManager API का उपयोग करके Wi-Fi Direct स्थिति परिवर्तनों की निगरानी के लिए एक बुनियादी सेटअप दिखाता है।
आवश्यक अनुमतियाँ
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" /> <!-- Android 13+ -->
चरण 1: प्रोजेक्ट बनाएं
Android Studio → New Project → Empty Activity → नाम: WifiDirectDemo।
चरण 2: लेआउट (activity_main.xml)
Wi-Fi Direct चालू/बंद करने के लिए एक बटन।
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<Button
android:id="@+id/toggleButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wi-Fi Direct चालू करें"
android:padding="16dp"
android:minWidth="200dp" />
<TextView
android:id="@+id/tvStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="स्थिति: अज्ञात"
android:textSize="16sp" />
</LinearLayout>
चरण 3: BroadcastReceiver for Wi-Fi Direct Events
src/WifiDirectBroadcastReceiver.java - P2P स्थिति परिवर्तनों को सुनता है।
package com.example.wifidirectdemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.p2p.WifiP2pManager;
import android.widget.Toast;
public class WifiDirectBroadcastReceiver extends BroadcastReceiver {
private final WifiP2pManager manager;
private final WifiP2pManager.Channel channel;
private final MainActivity activity;
public WifiDirectBroadcastReceiver(WifiP2pManager manager,
WifiP2pManager.Channel channel,
MainActivity activity) {
this.manager = manager;
this.channel = channel;
this.activity = activity;
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
activity.updateStatus("Wi-Fi Direct: सक्षम");
Toast.makeText(activity, "Wi-Fi Direct चालू है", Toast.LENGTH_SHORT).show();
} else {
activity.updateStatus("Wi-Fi Direct: अक्षम");
Toast.makeText(activity, "Wi-Fi Direct बंद है", Toast.LENGTH_SHORT).show();
}
}
else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
// पीयर सूची बदली - manager.requestPeers() के साथ डिवाइस खोजें
activity.updateStatus("पीयर सूची अपडेट हुई");
}
else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
// कनेक्शन स्थिति बदली
activity.updateStatus("कनेक्शन स्थिति बदली");
}
else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
// इस डिवाइस का विवरण बदला
activity.updateStatus("डिवाइस विवरण अपडेट हुए");
}
}
}
चरण 4: MainActivity कार्यान्वयन
package com.example.wifidirectdemo;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.net.wifi.p2p.WifiP2pManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private WifiManager wifiManager;
private WifiP2pManager p2pManager;
private WifiP2pManager.Channel channel;
private WifiDirectBroadcastReceiver receiver;
private IntentFilter intentFilter;
private Button toggleButton;
private TextView tvStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toggleButton = findViewById(R.id.toggleButton);
tvStatus = findViewById(R.id.tvStatus);
// सिस्टम सेवाएं प्राप्त करें
wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
p2pManager = (WifiP2pManager) getApplicationContext().getSystemService(WIFI_P2P_SERVICE);
// P2P चैनल प्रारंभ करें
channel = p2pManager.initialize(this, getMainLooper(), null);
// रिसीवर और इंटेंट फिल्टर सेटअप करें
receiver = new WifiDirectBroadcastReceiver(p2pManager, channel, this);
intentFilter = new IntentFilter();
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);
toggleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleWifiDirect();
}
});
}
private void toggleWifiDirect() {
if (wifiManager != null) {
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
toggleButton.setText("Wi-Fi Direct चालू करें");
updateStatus("Wi-Fi अक्षम किया जा रहा है...");
} else {
wifiManager.setWifiEnabled(true);
toggleButton.setText("Wi-Fi Direct बंद करें");
updateStatus("Wi-Fi सक्षम किया जा रहा है...");
}
}
}
public void updateStatus(String status) {
runOnUiThread(() -> tvStatus.setText("स्थिति: " + status));
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(receiver, intentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
}
चरण 5: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.wifidirectdemo">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Wi-Fi Direct प्रमुख कार्य (अगले चरण)
यह बुनियादी सेटअप केवल स्थिति की निगरानी करता है। पूर्ण P2P कार्यक्षमता के लिए, आपको आवश्यकता होगी:
- पीयर खोजें:
manager.discoverPeers(channel, actionListener) - पीयर सूची प्राप्त करें:
manager.requestPeers(channel, peerListListener) - कनेक्ट करें:
WifiP2pConfigके साथmanager.connect(channel, config, actionListener) - कनेक्शन जानकारी:
manager.requestConnectionInfo(channel, connectionInfoListener) - सॉकेट संचार: कनेक्ट होने के बाद, डेटा स्थानांतरण के लिए ServerSocket/Socket का उपयोग करें
महत्वपूर्ण API सारांश
| क्लास/विधि | उद्देश्य |
|---|---|
WifiP2pManager | P2P संचालन के लिए मुख्य प्रवेश बिंदु |
initialize(Context, Looper, Callback) | P2P फ्रेमवर्क प्रारंभ करता है, Channel लौटाता है |
discoverPeers(Channel, ActionListener) | पीयर खोज प्रारंभ करता है |
requestPeers(Channel, PeerListListener) | खोजे गए पीयर की सूची प्राप्त करता है |
connect(Channel, WifiP2pConfig, ActionListener) | पीयर से कनेक्शन आरंभ करता है |
createGroup(Channel, ActionListener) | ग्रुप ओनर के रूप में समूह बनाता है |
removeGroup(Channel, ActionListener) | P2P समूह हटाता है |
requestConnectionInfo(Channel, ConnectionInfoListener) | कनेक्शन विवरण (ग्रुप ओनर IP, आदि) प्राप्त करता है |
Android संस्करण नोट्स
- Android 10+ (API 29+): स्थान अनुमति के बिना स्कैनिंग/खोज प्रतिबंधित
- Android 11+ (API 30+):
NEARBY_WIFI_DEVICESअनुमति विकल्प - Android 12+ (API 31+): MAC रैंडमाइजेशन, उन्नत गोपनीयता
- Android 13+ (API 33+):
NEARBY_WIFI_DEVICESअनुमति अनिवार्य
निष्कर्ष
Wi-Fi Direct उच्च-बैंडविड्थ, कम-विलंबता डिवाइस-टू-डिवाइस संचार को सक्षम करता है। यह आधार सेटअप P2P स्थिति परिवर्तनों की निगरानी करता है। पूर्ण P2P ऐप्स (फाइल शेयरिंग, मल्टीप्लेयर गेमिंग, IoT नियंत्रण) के लिए, पीयर खोज, कनेक्शन प्रबंधन और सॉकेट-आधारित डेटा स्थानांतरण लागू करें।