অ্যান্ড্রয়েডে Wi-Fi সংযুক্ত থাকলে আমি কীভাবে দেখতে পাব?


237

আমি চাই না যে আমার ব্যবহারকারীর ওয়াই-ফাই সংযুক্ত না থাকলেও কিছু ডাউনলোড করার চেষ্টা করা উচিত। তবে, আমি কেবলমাত্র ওয়াই-ফাই সক্ষম আছে কিনা তা বলতে সক্ষম হতে পারে বলে মনে হতে পারে তবে তাদের কাছে এখনও 3 জি সংযোগ থাকতে পারে।

android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
    return false;
}

তবে, রাজ্যটি আমি যা প্রত্যাশা করব তা নয়। Wi-Fi সংযুক্ত থাকলেও আমি OBTAINING_IPADDRরাজ্য হিসাবে পাচ্ছি ।

উত্তর:


463

আপনার Wi-Fi অ্যাডাপ্টারের অবস্থা পেতে কানেক্টিভিটি ম্যানেজারটি ব্যবহার করতে সক্ষম হওয়া উচিত। সেখান থেকে আপনি এটি সংযুক্ত বা এমনকি উপলব্ধ কিনা তা পরীক্ষা করতে পারেন ।

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWifi.isConnected()) {
    // Do whatever
}

দ্রষ্টব্য: এটি অবশ্যই উল্লেখ করা উচিত (আমাদের জন্য n00bies এখানে) যা আপনাকে যুক্ত করতে হবে

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

তোমার

এটি কাজ করার জন্য অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল

দ্রষ্টব্য 2 : public NetworkInfo getNetworkInfo (int networkType)এখন হ্রাস করা হয়েছে:

এই পদ্ধতিটি এপিআই 23 স্তরে অবনতি হয়েছে This এই পদ্ধতিটি একই ধরণের একাধিক সংযুক্ত নেটওয়ার্কগুলিকে সমর্থন করে না। পরিবর্তে getAllNetworks () এবং getNetworkInfo (android.net.Network) ব্যবহার করুন।

দ্রষ্টব্য : public static final int TYPE_WIFIএখন অবহেলা করা হয়েছে:

এই ধ্রুবকটি এপিআই স্তরের ২৮-এ অবমুক্ত করা হয়েছিল Applications সমর্থিত পরিবহণের জন্য।


72
এটি লক্ষ রাখতে হবে (আমাদের এখানে নুবিদের জন্য) এটি কাজ করার android.permission.ACCESS_NETWORK_STATEজন্য আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল যুক্ত করতে হবে।
মগলগগুলি

10
অ্যান্ড্রয়েডের খুব সাম্প্রতিক সংস্করণগুলিতে, আপনাকে এমওয়াইফাইতে নুলের জন্য পরীক্ষা করা দরকার ... আপনার কোডটি এখানে একটি নাল পয়েন্টার ত্রুটি ফেলে দিতে পারে। দেখুন developer.android.com/training/basics/network-ops/managing.html এবং বিশেষ করে "পদ্ধতি getActiveNetworkInfo () ফেরৎ একটি NetworkInfo ..."
eb80

1
এটি আমার জন্য ইথারনেট ইন্টারফেসের সাথেও কাজ করেছিল। আমি সবেমাত্র কানেক্টিভিটি
এমবিএইচ

3
NetworkInfo.isConnected () পদ্ধতিটি এখন API-23-এ অবমূল্যায়িত হয়েছে। আমি নীচে একটি সমাধান পোস্ট করছি।
বিপ্লবী


75

যেহেতু পদ্ধতি NetworkInfo.isConnected () এখন অবচিত মধ্যে এপিআই-23 , এখানে একটি পদ্ধতি যা Wi-Fi এডাপটার হয় এবং পরিবর্তে WifiManager ব্যবহার করে একটি অ্যাক্সেস পয়েন্ট এ সংযুক্ত সনাক্ত করে হল:

private boolean checkWifiOnAndConnected() {
    WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON

        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();

        if( wifiInfo.getNetworkId() == -1 ){
            return false; // Not connected to an access point
        }
        return true; // Connected to an access point
    }
    else {
        return false; // Wi-Fi adapter is OFF
    }
}

4
এটি উল্লেখ করার মতো যে wifiInfo নাল হতে পারে তাই আমার মনে হয় আপনার নেটওয়ার্ক আইডি পাওয়ার আগে
নালটি

2
NetworkInfo.isConnected()আমার কাছে অবচয় দেখায় না
এরিকরবার্টব্রেভার

অনুমতি যোগ করতে ভুলবেন না:android.permission.ACCESS_WIFI_STATE
টন স্নোই

1
অবস্থানের অনুমতি এবং অবস্থান মোড চালু না করে এটি আর অ্যান্ড্রয়েড কিউতে আর কাজ করবে না, ইস্যুটিয়রেকার.কম . / issues/136021574 দেখুন
কনসুমিয়ারার

@ এরিকরবার্টব্রেয়ার মন্তব্য আর আপ টু ডেট নেই। এটি এখন, এপিআই 29+ অবমানিত।
nuKs

35

আমি কেবল নিম্নলিখিতটি ব্যবহার করি:

SupplicantState supState; 
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
supState = wifiInfo.getSupplicantState();

আপনি getSupplicantState () কল করার সময় যা এইগুলির মধ্যে একটিতে ফিরে আসবে;

সংযুক্ত - সমিতি সম্পন্ন হয়েছে।

সহযোগিতা - একটি অ্যাক্সেস পয়েন্টের সাথে সংযুক্ত করার চেষ্টা করা হচ্ছে Try

সম্পূর্ণ - সমস্ত প্রমাণীকরণ সম্পূর্ণ।

সংযোগবিহীন - এই রাষ্ট্রটি ইঙ্গিত দেয় যে ক্লায়েন্ট জড়িত নয়, তবে সম্ভবত অ্যাক্সেস পয়েন্টের সন্ধান শুরু হবে।

ডরম্যান্ট - একটি ক্লায়েন্ট একটি সুস্পষ্ট বিচ্ছিন্ন কমান্ড ইস্যু করার সময় একটি অ্যান্ড্রয়েড-যুক্ত রাষ্ট্র হিসাবে রিপোর্ট করা হয়।

FOUR_WAY_HANDSHAKE - ডাব্লুপিএ 4-ওয়ে কী হ্যান্ডশেক চলছে।

GROUP_HANDSHAKE - WPA গ্রুপ কী হ্যান্ডশেক চলছে।

সংক্রামক - নিষ্ক্রিয় রাষ্ট্র।

ইনভ্যালিড - এমন একটি সিউডো-স্টেট যা সাধারণত কখনই দেখা যায় না।

স্ক্যান করা - একটি নেটওয়ার্কের জন্য স্ক্যান করা হচ্ছে।

আনুষ্ঠানিকভাবে - সংযোগ নেই।


হাই ডোনাল.আমাদের ডিভাইসটি ওয়াইফাইয়ের সাথে সংযুক্ত আছে কিনা তা পেতে আমি একইভাবে ব্যবহার করেছি addition তবে অতিরিক্তভাবে বর্তমানে ওয়াইফাই ব্যবহার করে অ্যাপের নামটি আমার জানা দরকার that কীভাবে এটি করা যায়?
অভিষেকবি

@ অভিষেকবি, দুঃখিত তবে এর সাথে আমার কোনও অভিজ্ঞতা নেই, সম্ভবত কিছু ওয়াই-ফাই মনিটরিং অ্যাপ্লিকেশন দেখার চেষ্টা করুন, দেখুন যে কোনও ওপেন সোর্স রয়েছে যেখানে আপনি কোডটি পর্যালোচনা করতে পারবেন।
ডোনাল রাফের্টি

আমি এই সমাধানটি সম্পর্কে সন্দেহজনক কারণ কেবল ডাব্লুপিএ (বা ডাব্লুপিএর কিছু প্রকরণ) ব্যবহার করা হলে কেবল অনুরোধ করা হয়: যদি ব্যবহারকারী কোনও প্রমাণীকরণ বা ডব্লিউইপি সহ কোনও এপিতে সংযুক্ত হন তবে অনুরোধকারী জড়িত না।
টম

2
আমি এখনও ওয়াইফাই
ইভান পার্সসন

1
উপরে বর্ণিত রাজ্যগুলির জন্য কি কোনও সিস্টেম সম্প্রচারের অভিপ্রায় রয়েছে? @ ডোনালরফের্টি
রোহিত সিং

19

সক্রিয় নেটওয়ার্কটি ওয়াই-ফাই কিনা তা পরীক্ষা করতে আমি আমার অ্যাপগুলিতে এটি ব্যবহার করছি:

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI)
{

    // Do your work here

}

এটি সর্বোত্তম উত্তর কারণ এটি নিশ্চিত করে যে activeনেটওয়ার্কটি (ডাউনলোড করার জন্য যেটি ব্যবহৃত হবে) এটি ওয়াইফাই
গ্যাভরিল

1
এছাড়া সেরা উত্তর এখন যে NetworkInfo#isConnectedঅবচিত
Tash Pemhiwa

অবশ্যই এই বছর (2017) এর সেরা উত্তর।
ড্যানিয়েল

18

আমি এর মতো কয়েকটি প্রশ্নের এক নজর ছিল এবং এটি নিয়ে এসেছি:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if (wifi.isConnected()){
    // If Wi-Fi connected
}

if (mobile.isConnected()) {
    // If Internet connected
}

রুট টুলবক্স প্রোতে আমার লাইসেন্স যাচাইয়ের জন্য আমি ব্যবহার করি এবং এটি দুর্দান্ত কাজ করে বলে মনে হচ্ছে।


8
দেখতে দেখতে দুর্দান্ত তবে আপনি কেন কানেকটিভিটি ম্যানেজারের জন্য দ্বিতীয় রেফারেন্স পান তা নিশ্চিত নই। এই উদাহরণে কান ম্যানেজার এবং কান ম্যানেজার 1 উভয়ই একই বস্তু
নাথান শোয়ারম্যান

1
TYPE_MOBLIE এর অর্থ 3gnet বা জিপিআর নেট?
herbertD

1
TYPE_MOBILE অর্থ আপনার বাহক - 2 জি (জিপিআরএস ...), 3 জি (এইচএসডিপিএ ...) বা 4 জি (এলটিই ...) ব্যবহার করে যে কোনও ডেটা ব্যবহার করা।
ইউজেন পেচানেক

1
আপনি TYPE_ETHERNET যুক্ত করতে পারেন যা ইথারনেটের সাথে অ্যান্ড্রয়েড সংযোগ করার সময় দুর্দান্ত কাজ করেছিল
এমবিএইচ

1
এটি মনে রাখবেন মূল্যবান getNetworkInfo(), যদি নেটওয়ার্কটি না থাকে তবে তা বাতিল হয়ে যাবে। সুতরাং যদি ডিভাইসে কোনও মোবাইল সংযোগ না থাকে তবে এটি ত্রুটি ছুঁড়ে দেবে। বেশিরভাগ ক্ষেত্রে, TYPE_ETHERNET এ ক্ষেত্রে শূন্যতা সৃষ্টি করবে, কারণ বেশিরভাগ ডিভাইসে ইথারনেট সংযোগ থাকবে না।
ন্নোসোস

7

জেসনের উত্তরটি সঠিক হলেও আজকাল getNetWorkInfo (int) একটি অবহেলা পদ্ধতি। সুতরাং, পরবর্তী ফাংশনটি একটি দুর্দান্ত বিকল্প হবে:

public static boolean isWifiAvailable (Context context)
{
    boolean br = false;
    ConnectivityManager cm = null;
    NetworkInfo ni = null;

    cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    ni = cm.getActiveNetworkInfo();
    br = ((null != ni) && (ni.isConnected()) && (ni.getType() == ConnectivityManager.TYPE_WIFI));

    return br;
}

3

ব্যবহার করে WifiManagerআপনি করতে পারেন:

WifiManager wifi = (WifiManager) getSystemService (Context.WIFI_SERVICE);
if (wifi.getConnectionInfo().getNetworkId() != -1) {/* connected */}

GetNeworkId পদ্ধতিটি কেবলমাত্র কোনও নেটওয়ার্কের সাথে সংযুক্ত না থাকলে -1 প্রদান করে;


WIFI_STATE_DISABLED ধ্রুবক রয়েছে যার মান: 1 (0x00000001) WIFI_STATE_DISABLING ধ্রুবক রয়েছে যার মান: 0 (0x00000000) WIFI_STATE_ENABLED ধ্রুবক রয়েছে যার মান: 3 (0x00000003) ধ্রুবক রয়েছে যার মান WIFI_STATE_ENABLING: 2 (0x00000002) WIFI_STATE_UNKNOWN ধ্রুবক রয়েছে যার মান: 4 (0x00000004)
লু Morda


অবস্থানের অনুমতি এবং অবস্থান মোড চালু না করে এটি আর অ্যান্ড্রয়েড কিউতে আর কাজ করবে না, ইস্যুটিয়রেকার.কম . / issues/136021574 দেখুন
কনসুমিয়ারার

3
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
boolean is3g = manager.getNetworkInfo(
                  ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
boolean isWifi = manager.getNetworkInfo(
                    ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

Log.v("", is3g + " ConnectivityManager Test " + isWifi);
if (!is3g && !isWifi) {
    Toast.makeText(
        getApplicationContext(),
        "Please make sure, your network connection is ON ",
        Toast.LENGTH_LONG).show();
}
else {
    // Put your function() to go further;
}

1
কেবল কোডের চেয়ে কিছু ব্যাখ্যা যুক্ত করা ভাল।
এডচুম

2
আমি আইস কানেক্টেড () ব্যবহার করব , ডকস বলেছেন: boolean isConnectedOrConnecting ()নেটওয়ার্ক সংযোগ বিদ্যমান কিনা তা প্রতিষ্ঠিত হওয়ার প্রক্রিয়াধীন রয়েছে তা নির্দেশ করে। এটি অ্যাপ্লিকেশনগুলির জন্য ভাল যা ডেটা পড়া বা লেখার বাইরে নেটওয়ার্ক সম্পর্কিত যে কোনও কিছু করা দরকার। পরবর্তীগুলির জন্য, isConnected()পরিবর্তে কল করুন, যা গ্যারান্টি দেয় যে নেটওয়ার্ক সম্পূর্ণরূপে ব্যবহারযোগ্য।
18446744073709551615

3

নিম্নলিখিত কোড (কোটলিনে) কমপক্ষে বর্তমান এপিআই সংস্করণ (এপিআই 29) পর্যন্ত এপিআই 21 থেকে কাজ করে। GetWifiState () ফাংশনটি ওয়াইফাই নেটওয়ার্ক রাষ্ট্রের জন্য 3 সম্ভাব্য মানগুলির মধ্যে একটি প্রদান করে: একটি এনম ক্লাসে সংজ্ঞায়িত করা অক্ষম, এনএবলডনট সংযুক্ত এবং সংযুক্ত। এটি ব্যবহারকারীকে ওয়াইফাই সক্ষম করতে বা যদি ইতিমধ্যে সক্ষম থাকে তবে উপলব্ধ নেটওয়ার্কগুলির মধ্যে একটিতে সংযোগ স্থাপনের মতো আরও দানাদার সিদ্ধান্ত গ্রহণের অনুমতি দেয়। তবে যদি প্রয়োজন হয় এমন সমস্ত বুলিয়ান যা যদি ওয়াইফাই ইন্টারফেসটি কোনও নেটওয়ার্কের সাথে সংযুক্ত থাকে, তবে অন্য ফাংশনটি ওয়াইফাই সংযুক্ত () আপনাকে দিবে। এটি পূর্ববর্তীটি ব্যবহার করে এবং ফলাফলটিকে সংযুক্তের সাথে তুলনা করে।

এটি পূর্বের কয়েকটি উত্তরে অনুপ্রেরণা পেয়েছে তবে অ্যানড্রয়েড এপিআই এর বিবর্তন বা আইপি ভি 6 এর ধীরে ধীরে ক্রমবর্ধমান প্রাপ্যতার দ্বারা প্রবর্তিত সমস্যাগুলি সমাধান করার চেষ্টা করছে। কৌশলটি ব্যবহার করা ছিল:

wifiManager.connectionInfo.bssid != null 

পরিবর্তে:

  1. getIpAddress () == 0 যা কেবল আইপি ভি 4 বা এর জন্য বৈধ
  2. getNetworkId () == -1 এর জন্য এখন অন্য বিশেষ অনুমতি প্রয়োজন (অবস্থান)

ডকুমেন্টেশন অনুসারে: https://developer.android.com/references/kotlin/android/net/wifi/WifiInfo.html#getbssid কোনও নেটওয়ার্কের সাথে সংযুক্ত না থাকলে এটি বাতিল হয়ে যাবে। এবং যদিও আমাদের কাছে আসল মান পাওয়ার অনুমতি নেই, তবুও আমরা সংযুক্ত থাকলে এটি নাল ব্যতীত অন্য কিছু ফিরিয়ে আনবে।

নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

Android.os.Build.VERSION_CODES # N এর পূর্বে রিলিজে, এই কলটি কেবলমাত্র প্রসঙ্গ # get অ্যাপ্লিকেশনস কনটেক্সট () থেকে প্রাপ্ত হওয়া উচিত, এবং কলিংয়ের প্রক্রিয়াটির মধ্যে মেমরি ফাঁস এড়াতে অন্য কোনও উত্পন্ন প্রসঙ্গ থেকে নয়।

ম্যানিফেস্টে, যুক্ত করতে ভুলবেন না:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

প্রস্তাবিত কোডটি হ'ল:

class MyViewModel(application: Application) : AndroidViewModel(application) {

   // Get application context
    private val myAppContext: Context = getApplication<Application>().applicationContext

   // Define the different possible states for the WiFi Connection
    internal enum class WifiState {
        Disabled,               // WiFi is not enabled
        EnabledNotConnected,    // WiFi is enabled but we are not connected to any WiFi network
        Connected,              // Connected to a WiFi network
    }

    // Get the current state of the WiFi network
    private fun getWifiState() : WifiState {

        val wifiManager : WifiManager = myAppContext.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

        return if (wifiManager.isWifiEnabled) {
                    if (wifiManager.connectionInfo.bssid != null)
                        WifiState.Connected
                    else
                        WifiState.EnabledNotConnected
               } else {
                    WifiState.Disabled
               }
    }

    // Returns true if we are connected to a WiFi network
    private fun isWiFiConnected() : Boolean {
        return (getWifiState() == WifiState.Connected)
    }
}

3

NetworkInfoবর্গ, এপিআই স্তর 29 এ অনুমোদিত নয় মত সংশ্লিষ্ট এক্সেস পদ্ধতি সহ ConnectivityManager#getNetworkInfo()এবং ConnectivityManager#getActiveNetworkInfo()

ডকুমেন্টেশন এখন মানুষ প্রস্তাব দেওয়া ব্যবহার করতে ConnectivityManager.NetworkCallbackasynchronized কলব্যাক পর্যবেক্ষণ, বা ব্যবহারের জন্য API ConnectivityManager#getNetworkCapabilitiesবা ConnectivityManager#getLinkPropertiesনেটওয়ার্ক সংক্রান্ত তথ্য এর সিঙ্ক্রোনাইজ অ্যাক্সেসের জন্য

সংযোগ পরিবর্তনের বিষয়ে জানতে কলারদের পরিবর্তে কানেক্টিভিটি ম্যানেজ.নেটওয়ার্কক্যালব্যাক এপিআই ব্যবহার করা উচিত বা সংযোগের সাথে তথ্য পেতে সংযোগ ব্যবস্থাপনার # getNetworkCapables বা কানেক্টিভিটি ম্যানেজার # getLinkProperties ব্যবহার করতে হবে।


ওয়াইফাই সংযুক্ত কিনা তা যাচাই করতে, আমি যে কোডটি ব্যবহার করি তা এখানে রয়েছে:

Kotlin:

val connMgr = applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
connMgr?: return false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    val network: Network = connMgr.activeNetwork ?: return false
    val capabilities = connMgr.getNetworkCapabilities(network)
    return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
} else {
    val networkInfo = connMgr.activeNetworkInfo ?: return false
    return networkInfo.isConnected && networkInfo.type == ConnectivityManager.TYPE_WIFI
}

জাভা:

ConnectivityManager connMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connMgr == null) {
    return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    Network network = connMgr.getActiveNetwork();
    if (network == null) return false;
    NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
    return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
} else {
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
}

ACCESS_NETWORK_STATEআপনার ম্যানিফেস্ট ফাইলে অনুমতি যুক্ত করার কথা মনে রাখবেন ।


2

এই পদ্ধতিটি ব্যবহার করে দেখুন।

public boolean isInternetConnected() {
    ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean ret = true;
    if (conMgr != null) {
        NetworkInfo i = conMgr.getActiveNetworkInfo();

        if (i != null) {
            if (!i.isConnected()) {
                ret = false;
            }

            if (!i.isAvailable()) {
                ret = false;
            }
        }

        if (i == null)
            ret = false;
    } else
        ret = false;
    return ret;
}

এই পদ্ধতিটি ইন্টারনেট সংযোগ উপলব্ধ কিনা তা খুঁজে পেতে সহায়তা করবে।


1
সক্রিয় সংযোগটি ওয়াইফাই হয় কিনা তা আমি বিশেষভাবে দেখছিলাম। এছাড়াও, কনমেজারে নাল চেক করার দরকার নেই এটি কখনই বাতিল হবে না।
নাথান শোয়ারম্যান

আপনি কি এই প্রশ্নটি পরীক্ষা করতে পারেন ? :(
Skizo-ozᴉʞS

2

এটি আমার পক্ষে কাজ করে:

    ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    // Mobile
    State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();

    // Wi-Fi
    State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

    // And then use it like this:

    if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Mobile is Enabled :) ....",Toast.LENGTH_LONG).show();
    }
    else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Wifi is Enabled  :) ....",Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(Wifi_Gprs.this,"No Wifi or Gprs Enabled :( ....",Toast.LENGTH_LONG).show();
    }

এবং এই অনুমতি যুক্ত করুন:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2

উত্তরগুলির মধ্যে অনেকগুলি হ্রাসযুক্ত এপিআই সংস্করণগুলিতে অবহেলিত কোড বা কোড উপলব্ধ ব্যবহার করে। এখন আমি এরকম কিছু ব্যবহার করি

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(connectivityManager != null) {
            for (Network net : connectivityManager.getAllNetworks()) {
                NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(net);
                if (nc != null && nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                        && nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))
                    return true;
            }
        }
        return false;

1

আমি আমার অ্যাপ্লিকেশনগুলিতে একটি ইউটিলিটি পদ্ধতি হিসাবে যা ব্যবহার করি তা এখানে:

public static boolean isDeviceOnWifi(final Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        return mWifi != null && mWifi.isConnectedOrConnecting();
}

এটি উল্লেখ করা ভাল যে আপনি সংযোগ স্থাপনের জন্য যখন পরীক্ষা করছেন তখন isConnectedOrConnecting পদ্ধতিটি গুরুত্বপূর্ণ। ইসকনেক্টেড পদ্ধতিটি আমার পক্ষে কার্যকর হয়নি।
ভিনসেন্ট

1

নতুন সংস্করণে অ্যান্ড্রয়েড

private void getWifiInfo(Context context) {
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Network[] networks = connManager.getAllNetworks();

    if(networks == null || networks.length == 0)
        return;

    for( int i = 0; i < networks.length; i++) {
        Network ntk = networks[i];
        NetworkInfo ntkInfo = connManager.getNetworkInfo(ntk);
        if (ntkInfo.getType() == ConnectivityManager.TYPE_WIFI && ntkInfo.isConnected() ) {
            final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
            if (connectionInfo != null) {
                // add some code here
            }
        }

    }
}

এবং প্রিমেশন খুব যোগ করুন


connManager.getAllNetworks()21 স্তরের এপিআই স্তরের প্রয়োজন
জওয়ানদ সিং

1

@ জেসন নাইট উত্তর মত, কিন্তু কোটলিন উপায়ে:

val connManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)

if (mWifi.isConnected) {
     // Do whatever
}

ConnectivityManager.TYPE_WIFI
অবচয়

0

এটি একটি সহজ সমাধান। স্ট্যাক ওভারফ্লো প্রশ্ন দেখুন অ্যানড্রয়েডে ওয়াই-ফাই সক্ষম হয়েছে কিনা তা পরীক্ষা করা হচ্ছে

PS অনুমতি দেওয়ার জন্য ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে কোড যুক্ত করতে ভুলবেন না। নিচে দেখানো হয়েছে.

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>

0

চেষ্টা

wifiManager.getConnectionInfo().getIpAddress()

ডিভাইসটির ব্যবহারযোগ্য সংযোগ না হওয়া অবধি এটি 0 ফিরে আসে (আমার মেশিনে, একটি স্যামসাং এসএম-টি 280, অ্যান্ড্রয়েড 5.1.1)।


0

নীচের হিসাবে অ্যাক্টিভেট না করা থাকলে আপনি ওয়াইফাইটি চালু করতে পারেন। @ জেসন নাইট ২ এর উত্তর অনুসারে ওয়াইফাই রাষ্ট্রটি চেক করুন 2 যদি সক্রিয় না হয় তবে সক্রিয় করুন এটি ম্যানিফেস্ট ফাইলে ওয়াইফাইয়ের অনুমতি যুক্ত করতে ভুলবেন না

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

আপনার জাভা ক্লাসটি এমন হওয়া উচিত

public class TestApp extends Activity {
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //check WIFI activation
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if (mWifi.isConnected() == false) {
        showWIFIDisabledAlertToUser();
    }
    else {
        Toast.makeText(this, "WIFI is Enabled in your devide", Toast.LENGTH_SHORT).show();
    }
}


private void showWIFIDisabledAlertToUser(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("WIFI is disabled in your device. Would you like to enable it?")
            .setCancelable(false)
            .setPositiveButton("Goto Settings Page To Enable WIFI",
                    new DialogInterface.OnClickListener(){
                        public void onClick(DialogInterface dialog, int id){
                            Intent callGPSSettingIntent = new Intent(
                                    Settings.ACTION_WIFI_SETTINGS);
                            startActivity(callGPSSettingIntent);
                        }
                    });
    alertDialogBuilder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int id){
                    dialog.cancel();
                }
            });
    AlertDialog alert = alertDialogBuilder.create();
    alert.show();
}

}


0

জাভা এর জন্য এটি যুক্ত করুন:

public boolean CheckWifiConnection() {
        ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
        if (conMgr.getActiveNetworkInfo() != null
                && conMgr.getActiveNetworkInfo().isAvailable()
                && conMgr.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    }

ম্যানিফেস্ট ফাইলটিতে নিম্নলিখিত অনুমতিগুলি যুক্ত করুন:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

0

পুরানো একটি প্রকারের প্রশ্ন তবে এটি আমি ব্যবহার করি। ন্যূনতম এপিআই স্তর 21 প্রয়োজন অবহিত নেটওয়ার্কইনফো এপিসের বিবেচনায় নেয়।

boolean isWifiConn = false;
    ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Network network = connMgr.getActiveNetwork();
        if (network == null) return false;
        NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
        if(capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)){
            isWifiConn = true;
            Toast.makeText(context,"Wifi connected Api >= "+Build.VERSION_CODES.M,Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(context,"Wifi not connected Api >= "+Build.VERSION_CODES.M,Toast.LENGTH_LONG).show();
        }
    } else {
        for (Network network : connMgr.getAllNetworks()) {
            NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected()) {
                isWifiConn = true;
                Toast.makeText(context,"Wifi connected ",Toast.LENGTH_LONG).show();
                break;
            }else{
                Toast.makeText(context,"Wifi not connected ",Toast.LENGTH_LONG).show();
            }
        }
    }
    return isWifiConn;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.