Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में Wi-Fi Direct का उपयोग कैसे करें?

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 कार्यक्षमता के लिए, आपको आवश्यकता होगी:

  1. पीयर खोजें: manager.discoverPeers(channel, actionListener)
  2. पीयर सूची प्राप्त करें: manager.requestPeers(channel, peerListListener)
  3. कनेक्ट करें: WifiP2pConfig के साथ manager.connect(channel, config, actionListener)
  4. कनेक्शन जानकारी: manager.requestConnectionInfo(channel, connectionInfoListener)
  5. सॉकेट संचार: कनेक्ट होने के बाद, डेटा स्थानांतरण के लिए ServerSocket/Socket का उपयोग करें

महत्वपूर्ण API सारांश

क्लास/विधिउद्देश्य
WifiP2pManagerP2P संचालन के लिए मुख्य प्रवेश बिंदु
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 नियंत्रण) के लिए, पीयर खोज, कनेक्शन प्रबंधन और सॉकेट-आधारित डेटा स्थानांतरण लागू करें।

  1. Android में Snackbar का उपयोग कैसे करें? Android में Snackbar का उपयोग कैसे करें?

    परिचय Snackbar Material Design का एक घटक है जो स्क्रीन के निचले भाग में एक संक्षिप्त संदेश दिखाता है। यह उदाहरण Snackbar के बुनियादी उपयोग और अनुकूलन को दर्शाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.

  1. Android में NavigationView (नेविगेशन ड्रॉअर) कैसे उपयोग करें? Android में NavigationView (नेविगेशन ड्रॉअर) कैसे उपयोग करें?

    परिचय NavigationView मटेरियल डिज़ाइन का साइड नेविगेशन ड्रॉअर (हैमबर्गर मेनू) है। यह DrawerLayout के अंदर होता है और मेनू आइटम्स, हेडर, और नेविगेशन हैंडलिंग प्रदान करता है। यह ट्यूटोरियल Navigation Components के साथ आधुनिक सेटअप दिखाता है। आवश्यक चरण चरण 1: नया प्रोजेक्ट बनाएं Android Studio में Fi

  1. अपने फोन को WiFi हॉटस्पॉट के रूप में कैसे उपयोग करें अपने फोन को WiFi हॉटस्पॉट के रूप में कैसे उपयोग करें

    वे दिन गए जब हमें अपने iPhones और Androids को WiFi हॉटस्पॉट में बदलने वाले संदिग्ध थर्ड-पार्टी ऐप्स की तलाश में ऐप स्टोर और प्ले स्टोर को खंगालना पड़ता था। प्रक्रिया इन दिनों बहुत सरल है, Apple और Google दोनों द्वारा अपने संबंधित ऑपरेटिंग सिस्टम में WiFi हॉटस्पॉट सपोर्ट को बेक करने के लिए धन्यवाद।