অ্যান্ড্রয়েড অ্যাপে ইন্টারনেট সংযোগ যাচাই করার জন্য ব্রডকাস্ট রিসিভার


239

আমি ইন্টারনেট সংযোগ পরীক্ষা করার জন্য একটি অ্যান্ড্রয়েড ব্রডকাস্ট রিসিভার বিকাশ করছি।

সমস্যাটি হ'ল আমার সম্প্রচারের রিসিভারটি দুটিবার কল করা হচ্ছে। আমি চাই যখন কেবল নেটওয়ার্ক উপলব্ধ থাকে তখনই এটি কল হয়। এটি অনুপলব্ধ থাকলে, আমি অবহিত চাই না।

এটি ব্রডকাস্ট রিসিভার

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        final ConnectivityManager connMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        final android.net.NetworkInfo wifi = connMgr
                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        final android.net.NetworkInfo mobile = connMgr
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (wifi.isAvailable() || mobile.isAvailable()) {
            // Do something

            Log.d("Network Available ", "Flag No 1");
        }
    }
}

এটি ম্যানিফেস্ট.এক্সএমএল

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcastreceiverforinternetconnection"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <receiver android:name=".NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>



এই লাইব্রেরিটি চেষ্টা করুন, সমস্ত এত সহজেই কাজ করে। github.com/andrefio/Rx.Network
লাকি রানা

উত্তর:


239

আপনার প্রথম প্রশ্নের উত্তর : আপনার সম্প্রচারের রিসিভারটি দুটি বার বলা হচ্ছে কারণ এটি

আপনি দুটি যোগ করেছেন <intent-filter>

  1. নেটওয়ার্ক সংযোগে পরিবর্তন:
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

  2. ওয়াইফাই অবস্থায় পরিবর্তন করুন:
    <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />

শুধু এক ব্যবহার করুন:
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

এটি দুটিয়ের পরিবর্তে কেবলমাত্র একটি ক্রিয়াতে প্রতিক্রিয়া জানাবে। আরও তথ্যের জন্য এখানে দেখুন ।

আপনার দ্বিতীয় প্রশ্নের উত্তর (আপনি ইন্টারনেট সংযোগ উপলব্ধ থাকলে কেবল একবার রিসিভার কল করতে চান):

আপনার কোড নিখুঁত; আপনি কেবল যখন ইন্টারনেট উপলব্ধ থাকে তা অবহিত করুন।

হালনাগাদ

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

public boolean isOnline(Context context) {

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    //should check null because in airplane mode it will be null
    return (netInfo != null && netInfo.isConnected());
}

আমার দ্বিতীয় প্রশ্নের কোনটিই নয় আমি কেবলমাত্র নেটওয়ার্ক উপলব্ধ থাকলে বিজ্ঞপ্তি চাই তবে ফোনটি যদি নেটওয়ার্কটি ছেড়ে দেয় তবে এটিতে আমাকে অবহিত করা হচ্ছে।
নিখিল অগ্রবাল

8
একই অবস্থা. আমি সবেমাত্র <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />নিবন্ধন করেছি তবে আমার রিসিভারটি এখনও দু'বার কল করা হয়েছে। এটি আসলে খুব বড় সমস্যা নয় তবে আমি কেন তা জানতে চাই।
ইয়েং

1
আমি এসবের সাথে পরিচিত, তবে আমার সন্দেহ আছে। আমি কিছু পরীক্ষা করেছি এবং জানতে পেরেছি যে এই ব্রডকাস্ট রিসিভারগুলি আপনার ওয়াইফাই / ফোন রেডিওটি চালু বা বন্ধ হয় বা কেবল আপনার ডিভাইসের কোনও আইপি ঠিকানা রয়েছে কিনা তা সনাক্ত করে। সমস্যাটি আসে যখন উদাহরণস্বরূপ আমার ফোনটি একটি ওয়াইফাই অ্যাক্সেস পয়েন্টের সাথে সংযুক্ত থাকে তবে এই জাতীয় অ্যাক্সেস পয়েন্টটিতে কোনও ইন্টারনেট নেই। কোড / ফোন আমাকে অ্যাক্সেস পয়েন্ট ইন্টারনেট সরবরাহ করে বা না দিচ্ছে তা নির্বিশেষে এটিকে একটি ডেটা সংযোগ বলুন। কেউ কি কেবলমাত্র একটি ওয়াইফাই / অন / অফ শ্রোতা নয়, কীভাবে একটি আসল ডেটা-ইন্টারনেট শ্রোতা তৈরি করতে জানেন?
জোশ

6
@ জোসেগালিন্দো অন রিসিভিং, আপনি এই কোডটি ব্যবহার করে ডিভাইসটি ইন্টারনেট পেস্টবিন.
com

1
Android.net.conn.CONNECTIVITY_CHANGE এর জন্য একটি ব্রডকাস্ট্রিসিভার ঘোষণা করে এন এবং তার চেয়ে বেশি সংখ্যক অ্যাপ্লিকেশনগুলিকে লক্ষ্যবস্তু করা হয়েছে। সাধারণভাবে, অ্যাপ্লিকেশনগুলিকে এই সম্প্রচারের উপর নির্ভর করা উচিত নয় এবং পরিবর্তে জবশেডুলার বা জিসিএম নেটওয়ার্ক ম্যানেজার ব্যবহার করা উচিত। এখন ????
প্রতীক বুটানি

77
public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        if (checkInternet(context)) {
            Toast.makeText(context, "Network Available Do operations", Toast.LENGTH_LONG).show();
        }
    }

    boolean checkInternet(Context context) {
        ServiceManager serviceManager = new ServiceManager(context);
        if (serviceManager.isNetworkAvailable()) {
            return true;
        } else {
            return false;
        }
    }
}

ServiceManager.java

public class ServiceManager {

    Context context;

    public ServiceManager(Context base) {
        context = base;
    }

    public boolean isNetworkAvailable() {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        return networkInfo != null && networkInfo.isConnected();
    }
}

অনুমতি:

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

3
আমার জন্য সমস্যাটি ছিল নেটওয়ার্কের পরিবর্তনে রিসিভারকে দু'বার ফোন করা হয়েছিল?
মানিভানান

9
আপনি কেন একটি কনটেক্সট র্যাপার ব্যবহার করবেন? বুঝতে চান
দর্পণ

3
আমিও @ মানিভান্নান সমস্যা পাচ্ছি ... নেটওয়ার্ক পরিবর্তনে দু'বার রিসিভার কল করছে ... এর কোনও সমাধান আছে কি
ভেঙ্কট

কনটেক্সট্র্যাপার সহ সার্ভিস ম্যানেজার বাড়ানোর দরকার নেই।
যোগেশ সেরালিয়া

এটা কিসের জন্য? ServiceManager extends ContextWrapper? আপনার কনটেক্সট র‍্যাপারটি বাড়ানোর দরকার কেন? কেন !?
নিওন ওয়ার্জ

56

ব্রডকাস্ট রিসিভার ব্যবহার করে প্রতিবার ইন্টারনেটের অবস্থান চেক করা:

ইন্টারনেট স্ট্যাটাস বাস্তবায়ন

গুগল ড্রাইভে সম্পূর্ণ উত্স কোড উপলব্ধ

Andro আইডি

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<receiver android:name=".receivers.NetworkChangeReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
</receiver>

BroadcastReciever

package com.keshav.networkchangereceiverexample.receivers;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;

import static com.keshav.networkchangereceiverexample.MainActivity.dialog;

public class NetworkChangeReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        try
        {
            if (isOnline(context)) {
                dialog(true);
                Log.e("keshav", "Online Connect Intenet ");
            } else {
                dialog(false);
                Log.e("keshav", "Conectivity Failure !!! ");
            }
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }

    private boolean isOnline(Context context) {
        try {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();
            //should check null because in airplane mode it will be null
            return (netInfo != null && netInfo.isConnected());
        } catch (NullPointerException e) {
            e.printStackTrace();
            return false;
        }
    }
}

MainActivity.java

package com.keshav.networkchangereceiverexample;

import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

import com.keshav.networkchangereceiverexample.receivers.NetworkChangeReceiver;

public class MainActivity extends AppCompatActivity {

    private BroadcastReceiver mNetworkReceiver;
    static TextView tv_check_connection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_check_connection=(TextView) findViewById(R.id.tv_check_connection);
        mNetworkReceiver = new NetworkChangeReceiver();
        registerNetworkBroadcastForNougat();

    }

    public static void dialog(boolean value){

        if(value){
            tv_check_connection.setText("We are back !!!");
            tv_check_connection.setBackgroundColor(Color.GREEN);
            tv_check_connection.setTextColor(Color.WHITE);

            Handler handler = new Handler();
            Runnable delayrunnable = new Runnable() {
                @Override
                public void run() {
                    tv_check_connection.setVisibility(View.GONE);
                }
            };
            handler.postDelayed(delayrunnable, 3000);
        }else {
            tv_check_connection.setVisibility(View.VISIBLE);
            tv_check_connection.setText("Could not Connect to internet");
            tv_check_connection.setBackgroundColor(Color.RED);
            tv_check_connection.setTextColor(Color.WHITE);
        }
    }


    private void registerNetworkBroadcastForNougat() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            registerReceiver(mNetworkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
        }
    }

    protected void unregisterNetworkChanges() {
        try {
            unregisterReceiver(mNetworkReceiver);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterNetworkChanges();
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.keshav.networkchangereceiverexample.MainActivity">

    <TextView
        android:id="@+id/tv_check_connection"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Connection establised !"
        android:padding="25dp"
        app:layout_constraintBottom_toBottomOf="parent"
        android:gravity="center"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</LinearLayout>

ইউটিউবের মতো এটি খুব উপযোগী প্রতিবারই অনলাইনে, অফলাইনে চেক করুন
কেশব গেরা

আপনার দুর্দান্ত পোস্টের জন্য ধন্যবাদ। আপনি এটি কেন যুক্ত করেছেন: Build.VERSION.SDK_INT> = বিল্ড.VERSION_CODES.M) নিবন্ধকারনেটওয়ার্করোডকাস্টফোর্নগ্যাট? ম্যানিফেস্টটি অ্যান্ড্রয়েড এন এবং আপ-এ কাজ করছে না এবং এম ভাল হবে
আমির

4
এ registerNetworkBroadcastForNougat () ডুপ্লিকেট কোড
lenhuy2106

এই কোড বিভাগে অন্য কিছু থাকা উচিত নয়? 'if (বিল্ড.ভি.এস.আর.সি.এন.ডি.টি.টি. = = বিল্ড.VERSION_CODES.N) {নিবন্ধভুক্ত করুন (mNetworkReceiver, নতুন ইনটেন্টফিল্টার (সংযোগমনেজ। CONNECTIVITY_ACTION)); } অন্যথায় যদি (বিল্ড.ভি.এস.আর.এস.ডি.এনপিটি> = বিল্ড.VERSION_CODES.M) {নিবন্ধনকারী (mNetworkReceiver, নতুন ইনটেন্টফিল্টার (কানেক্টিভিটি ম্যানেজ। CONNECTIVITY_ACTION)); } '
সিদ্ধার্থ

প্রত্যাশিত আচরণ ধন্যবাদ!
সিমো গার্সিয়া

26

নেটওয়ার্কের অবস্থা পরীক্ষা করতে এই পদ্ধতিটি ব্যবহার করুন:

private void checkInternetConnection() {

    if (br == null) {

        br = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {

                Bundle extras = intent.getExtras();

                NetworkInfo info = (NetworkInfo) extras
                        .getParcelable("networkInfo");

                State state = info.getState();
                Log.d("TEST Internet", info.toString() + " "
                        + state.toString());

                if (state == State.CONNECTED) {
                      Toast.makeText(getApplicationContext(), "Internet connection is on", Toast.LENGTH_LONG).show();

                } else {
                       Toast.makeText(getApplicationContext(), "Internet connection is Off", Toast.LENGTH_LONG).show();
                }

            }
        };

        final IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver((BroadcastReceiver) br, intentFilter);
    }
}

অনডস্ট্রয়েতে নিবন্ধভুক্ত পরিষেবাটি মনে রাখবেন।

চিয়ার্স !!


9
public static boolean isNetworkAvailable(Context context) {
        boolean isMobile = false, isWifi = false;

        NetworkInfo[] infoAvailableNetworks = getConnectivityManagerInstance(
                context).getAllNetworkInfo();

        if (infoAvailableNetworks != null) {
            for (NetworkInfo network : infoAvailableNetworks) {

                if (network.getType() == ConnectivityManager.TYPE_WIFI) {
                    if (network.isConnected() && network.isAvailable())
                        isWifi = true;
                }
                if (network.getType() == ConnectivityManager.TYPE_MOBILE) {
                    if (network.isConnected() && network.isAvailable())
                        isMobile = true;
                }
            }
        }

        return isMobile || isWifi;
    }

/* You can write such method somewhere in utility class and call it NetworkChangeReceiver like below */
public class NetworkChangedReceiver extends BroadcastReceiver 
{
@Override
    public void onReceive(Context context, Intent intent) {

        if (isNetworkAvailable(context)) 
                {
             Toast.makeText(context, "Network Available Do operations",Toast.LENGTH_LONG).show(); 


    }
    }
}

উপরের এই সম্প্রচারিত রিসিভারটি কেবল তখনই কল করা হবে যখন নেটওয়ার্ক স্থিতি সংযোগে পরিবর্তিত হয় এবং সংযোগ বিচ্ছিন্ন না হয়।


7

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

প্রশ্নের মূল অংশের কোডটিতে একটি বাগ রয়েছে যা এখানে কেউ সম্বোধন করেনি। @ নিখিল ওয়াইফাই / মোবাইল উপলব্ধ কিনা এবং এটি সংযুক্ত আছে কিনা তা পরীক্ষা করছে।

ঠিক করা এখানে:

@Override
public void onReceive(final Context context, final Intent intent) {
    final ConnectivityManager connMgr = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    final android.net.NetworkInfo wifi = connMgr
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    final android.net.NetworkInfo mobile = connMgr
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    if (wifi.isConnected() || mobile.isConnected()) {
      // do stuff
    }
}

হ্যাঁ, আমি ঠিক একই প্রস্তাব করতে চাই, wifi.is সংযুক্ত () সংশোধন
এরিচ গার্সিয়া

7

সুস্পষ্ট:

<receiver android:name=".your.namepackage.here.ConnectivityReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent-filter>
</receiver>

রিসিভারের জন্য ক্লাস:

public class ConnectivityReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        switch (action) {
            case ConnectivityManager.CONNECTIVITY_ACTION:
                DebugUtils.logDebug("BROADCAST", "network change");
                if(NetworkUtils.isConnect()){
                    //do action here
                }
            break;
        }
    }
}

এবং ক্লাস যেমন ব্যবহারের উদাহরণগুলি:

public class NetworkUtils {

    public static boolean isConnect() {
        ConnectivityManager connectivityManager = (ConnectivityManager) Application.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Network[] netArray = connectivityManager.getAllNetworks();
            NetworkInfo netInfo;
            for (Network net : netArray) {
                netInfo = connectivityManager.getNetworkInfo(net);
                if ((netInfo.getTypeName().equalsIgnoreCase("WIFI") || netInfo.getTypeName().equalsIgnoreCase("MOBILE")) && netInfo.isConnected() && netInfo.isAvailable()) {
                    //if (netInfo.getState().equals(NetworkInfo.State.CONNECTED)) {
                    Log.d("Network", "NETWORKNAME: " + netInfo.getTypeName());
                    return true;
                }
            }
        } else {
            if (connectivityManager != null) {
                @SuppressWarnings("deprecation")
                NetworkInfo[] netInfoArray = connectivityManager.getAllNetworkInfo();
                if (netInfoArray != null) {
                    for (NetworkInfo netInfo : netInfoArray) {
                        if ((netInfo.getTypeName().equalsIgnoreCase("WIFI") || netInfo.getTypeName().equalsIgnoreCase("MOBILE")) && netInfo.isConnected() && netInfo.isAvailable()) {
                            //if (netInfo.getState() == NetworkInfo.State.CONNECTED) {
                            Log.d("Network", "NETWORKNAME: " + netInfo.getTypeName());
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }
}

7

কেবল অন্য কারও জন্য যারা গতিশীলভাবে একটি সম্প্রচার নিবন্ধন করতে চান:

BroadcastReceiver mWifiReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (checkWifiConnect()) {
            Log.d(TAG, "wifi has connected");
            // TODO
        }
    }
};

private void registerWifiReceiver() {
    IntentFilter filter = new IntentFilter();
    filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
    filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    mContext.registerReceiver(mWifiReceiver, filter);
}

private void unregisterWifiReceiver() {
    mContext.unregisterReceiver(mWifiReceiver);
}

private boolean checkWifiConnect() {
    ConnectivityManager manager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = manager.getActiveNetworkInfo();
    if (networkInfo != null
            && networkInfo.getType() == ConnectivityManager.TYPE_WIFI
            && networkInfo.isConnected()) {
        return true;
    }
    return false;
}

7

এটি দিয়ে চেষ্টা করুন

public class ConnectionBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {


    if (<Check internet connection available >) { 
        Toast.makeText(context, "connect to the internet", Toast.LENGTH_LONG).show();

        /*upload background upload service*/
        Intent serviceIntent = new Intent(context,<your service class>);
        context.startService(serviceIntent);


    }else{
        Toast.makeText(context, "Connection failed", Toast.LENGTH_LONG).show();

    }
    }
}

ইন্টারনেট সংযোগ ট্রিগার হওয়ার সাথে সাথেই এটি (ব্রডকাস্টআরসিভার) লোড হবে


এবং আপনি এই রিসিভারটি কীভাবে নিবন্ধভুক্ত করবেন? ফিল্টার কী?
স্টিলথ রাব্বি

6

সংযুক্তি_অ্যাকশন ডক্স :

অ্যান্ড্রয়েড .0.০ (এপিআই স্তর ২৪) এবং ততোধিক লক্ষ্যযুক্ত অ্যাপ্লিকেশনগুলি যদি তাদের ম্যানিফেস্টে ব্রডকাস্ট রিসিভার ঘোষণা করে তবে এই সম্প্রচারটি গ্রহণ করে না। অ্যাপ্লিকেশনগুলি যদি তাদের ব্রডকাস্টার্সিভারটি কনটেক্সট.রেজিস্টাররেসিভার () এর সাথে নিবন্ধিত করে তবে এখনও সম্প্রচারগুলি পাবেন এবং সেই প্রসঙ্গটি এখনও বৈধ।


5

ক্রিয়াকলাপ, খণ্ড বা প্রসঙ্গের জন্য এটি করার একটি আরামদায়ক উপায়। আপনি যদি এটি করতে চান তবে ক্রিয়াকলাপ / টুকরা (অনডাস্ট্রয়ে) এর জন্য এটি করা থাকলে এটি স্বয়ংক্রিয়ভাবে নিবন্ধভুক্ত হবে:

abstract class ConnectionBroadcastReceiver : BroadcastReceiver() {
    companion object {
        @JvmStatic
        fun registerWithoutAutoUnregister(context: Context, connectionBroadcastReceiver: ConnectionBroadcastReceiver) {
            context.registerReceiver(connectionBroadcastReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
        }

        @JvmStatic
        fun registerToFragmentAndAutoUnregister(context: Context, fragment: Fragment, connectionBroadcastReceiver: ConnectionBroadcastReceiver) {
            val applicationContext = context.applicationContext
            registerWithoutAutoUnregister(applicationContext, connectionBroadcastReceiver)
            fragment.lifecycle.addObserver(object : LifecycleObserver {
                @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
                fun onDestroy() {
                    applicationContext.unregisterReceiver(connectionBroadcastReceiver)
                }
            })
        }

        @JvmStatic
        fun registerToActivityAndAutoUnregister(activity: AppCompatActivity, connectionBroadcastReceiver: ConnectionBroadcastReceiver) {
            registerWithoutAutoUnregister(activity, connectionBroadcastReceiver)
            activity.lifecycle.addObserver(object : LifecycleObserver {
                @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
                fun onDestroy() {
                    activity.unregisterReceiver(connectionBroadcastReceiver)
                }
            })
        }

        @JvmStatic
        fun hasInternetConnection(context: Context): Boolean {
            val info = (context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).activeNetworkInfo
            return !(info == null || !info.isConnectedOrConnecting)
        }
    }

    override fun onReceive(context: Context, intent: Intent) {
        val hasConnection = !intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)
//        Log.d("AppLog", "conenctivity changed. hasConnection? $hasConnection")
        onConnectionChanged(hasConnection)
    }

    abstract fun onConnectionChanged(hasConnection: Boolean)
}

খণ্ডে ব্যবহার:

    ConnectionBroadcastReceiver.registerToFragmentAndAutoUnregister(activity!!, this, object : ConnectionBroadcastReceiver() {
        override fun onConnectionChanged(hasConnection: Boolean) {
            // Log.d("AppLog", "onConnectionChanged:" + hasConnection)
        }
    })

4

সতর্কতা: Declaring a broadcastreceiver for android.net.conn.CONNECTIVITY_CHANGE is deprecated for apps targeting N and higher. In general, apps should not rely on this broadcast and instead use JobScheduler or GCMNetworkManager.

যেমন CONNECTIVITY_CHANGE অবচিত তারপর আমরা একই কাপড় করছেন অন্য উপায় ব্যবহার করা উচিত

নিম্নলিখিতটি NetworkConnectionLiveDataএখন পর্যন্ত সমস্ত ওএস সংস্করণ পরিচালনা করবে এবং লক্ষ্য এসডিকে এর চেয়ে কম হলে Build.VERSION_CODES.LOLLIPOPকেবল আমরা ব্যবহার করতে পারিbroadcastReceiver

সেরা অংশটি হ'ল এই শ্রেণীর ব্যবহার LiveDataতাই কোনও রিসিভার ব্যবহার নিবন্ধকরণ করার প্রয়োজন নেই LiveDataএবং এটি সমস্ত জিনিস পরিচালনা করবে

class NetworkConnectionLiveData(val context: Context) : LiveData<Boolean>() {

    private var connectivityManager: ConnectivityManager = context.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager

    private lateinit var connectivityManagerCallback: ConnectivityManager.NetworkCallback

    override fun onActive() {
        super.onActive()
        updateConnection()
        when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.N -> connectivityManager.registerDefaultNetworkCallback(getConnectivityManagerCallback())
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> lollipopNetworkAvailableRequest()
            else -> {
                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
                    context.registerReceiver(networkReceiver, IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"))
                }
            }
        }
    }

    override fun onInactive() {
        super.onInactive()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            connectivityManager.unregisterNetworkCallback(connectivityManagerCallback)
        } else {
            context.unregisterReceiver(networkReceiver)
        }
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private fun lollipopNetworkAvailableRequest() {
        val builder = NetworkRequest.Builder()
                .addTransportType(android.net.NetworkCapabilities.TRANSPORT_CELLULAR)
                .addTransportType(android.net.NetworkCapabilities.TRANSPORT_WIFI)
        connectivityManager.registerNetworkCallback(builder.build(), getConnectivityManagerCallback())
    }

    private fun getConnectivityManagerCallback(): ConnectivityManager.NetworkCallback {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            connectivityManagerCallback = object : ConnectivityManager.NetworkCallback() {
                override fun onAvailable(network: Network?) {
                    postValue(true)
                }

                override fun onLost(network: Network?) {
                    postValue(false)
                }
            }
            return connectivityManagerCallback
        } else {
            throw IllegalAccessError("Should not happened")
        }
    }

    private val networkReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            updateConnection()
        }
    }

    private fun updateConnection() {
        val activeNetwork: NetworkInfo? = connectivityManager.activeNetworkInfo
        postValue(activeNetwork?.isConnected == true)
    }
} 

লাইভ ডেটা যে কোনও শ্রেণিতে ব্যবহার করুন:

NetworkConnectionLiveData(context ?: return)
    .observe(viewLifecycleOwner, Observer { isConnected ->
        if (!isConnected) {
            // Internet Not Available
            return@Observer
        }
        // Internet Available
})

3
public class AsyncCheckInternet extends AsyncTask<String, Void, Boolean> {

public static final int TIME_OUT = 10 * 1000;

private OnCallBack listener;

public interface OnCallBack {

    public void onBack(Boolean value);
}

public AsyncCheckInternet(OnCallBack listener) {
    this.listener = listener;
}

@Override
protected void onPreExecute() {
}

@Override
protected Boolean doInBackground(String... params) {

    ConnectivityManager connectivityManager = (ConnectivityManager) General.context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

    if ((networkInfo != null && networkInfo.isConnected())
            && ((networkInfo.getType() == ConnectivityManager.TYPE_WIFI) || (networkInfo
                    .getType() == ConnectivityManager.TYPE_MOBILE))) {
        HttpURLConnection urlc;
        try {
            urlc = (HttpURLConnection) (new URL("http://www.google.com")
                    .openConnection());
            urlc.setConnectTimeout(TIME_OUT);
            urlc.connect();
            if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) {
                return true;
            } else {
                return false;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return false;

        } catch (IOException e) {
            e.printStackTrace();
            return false;

        }
    } else {
        return false;
    }
}

@Override
protected void onPostExecute(Boolean result) {
    if (listener != null) {
        listener.onBack(result);
    }
}

}


অ্যাসিনটাস্কগুলি সত্যই ছোট কিছু ব্যবহার করা উচিত। পরিবর্তে আপনার পরিষেবাটি ব্যবহার করা উচিত।
TheLibrarian

3

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

public class NetworkStateChangeReceiver extends BroadcastReceiver {
  public static final String NETWORK_AVAILABLE_ACTION = "com.ajit.singh.NetworkAvailable";
  public static final String IS_NETWORK_AVAILABLE = "isNetworkAvailable";

  @Override
  public void onReceive(Context context, Intent intent) {
    Intent networkStateIntent = new Intent(NETWORK_AVAILABLE_ACTION);
    networkStateIntent.putExtra(IS_NETWORK_AVAILABLE,  isConnectedToInternet(context));
    LocalBroadcastManager.getInstance(context).sendBroadcast(networkStateIntent);
  }

  private boolean isConnectedToInternet(Context context) {
    try {
      if (context != null) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        return networkInfo != null && networkInfo.isConnected();
      }
      return false;
    } catch (Exception e) {
      Log.e(NetworkStateChangeReceiver.class.getName(), e.getMessage());
      return false;
    }
  }
}

আমি এই রিসিভারটি স্ক্রিনে একটি বিজ্ঞপ্তি দেখানোর জন্য লিখেছি, এজন্য আপনি নেটওয়ার্কের স্থিতি সহ কোনও স্থানীয় সম্প্রচার দেখতে পাচ্ছেন। বিজ্ঞপ্তিটি দেখানোর কোড এখানে is

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    IntentFilter intentFilter = new IntentFilter(NetworkStateChangeReceiver.NETWORK_AVAILABLE_ACTION);
    LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
        boolean isNetworkAvailable = intent.getBooleanExtra(IS_NETWORK_AVAILABLE, false);
        String networkStatus = isNetworkAvailable ? "connected" : "disconnected";

        Snackbar.make(findViewById(R.id.activity_main), "Network Status: " + networkStatus, Snackbar.LENGTH_LONG).show();
      }
    }, intentFilter);
  }
}

ক্রিয়াকলাপ নেটওয়ার্ক রিসিভার দ্বারা সম্প্রচারিত অভিপ্রায় শোনায় এবং স্ক্রিনে বিজ্ঞপ্তিটি দেখায়।


2

এখানে সম্পূর্ণ উত্তর

মেনিফেস্ট ফাইল

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

<receiver android:name=".NetworkStateReceiver">
    <intent-filter>
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
  </receiver>

ব্রডকার্ডআরসিভার ক্লাস

public class NetworkStateReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
     Log.d("app","Network connectivity change");
     if(intent.getExtras()!=null) {
        NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
        if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
            Log.i("app","Network "+ni.getTypeName()+" connected");
        } else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
            Log.d("app","There's no network connectivity");
        }
   }
}

রিসিভার নিবন্ধন করা হচ্ছে MainActivity

@Override
protected void onResume() {
    super.onResume();
    IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(networkReceiver, intentFilter);
}

@Override
protected void onPause() {
    super.onPause();
    if (networkReceiver != null)
        unregisterReceiver(networkReceiver);
}

উপভোগ করুন!


1

ইন্টারনেট সংযোগ পরিবর্তন চেক করতে ব্রডকাস্ট রিসিভার কোড:

public class BroadCastDetecter extends BroadcastReceiver {
    public static boolean internet_status = false;
    public static void checkInternetConenction(Context context) {
        internet_status = false;
        ConnectivityManager check = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (check != null) {
            NetworkInfo[] info = check.getAllNetworkInfo();
            if (info != null)
                for (int i = 0; i < info.length; i++)
                {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        internet_status = true;
                    }
                }
            if(internet_status)
            {
               //do what you want to if internet connection is available
            }
        }
    }

    @Override
    public void onReceive(Context context, Intent intent)
    {
        try {
            checkInternetConenction(context);
        }catch(Exception e){

        }
    }
}

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

 <receiver android:name=".BroadCastDetecter">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

1

এটি কেবল নেটওয়ার্ক ইন্টারফেস উপলব্ধ কিনা তা পরীক্ষা করে, কোনও নির্দিষ্ট নেটওয়ার্ক পরিষেবা উপলব্ধ থাকার গ্যারান্টি দেয় না, উদাহরণস্বরূপ, কম সংকেত বা সার্ভার ডাউনটাইম থাকতে পারে

  private boolean isNetworkInterfaceAvailable(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    }

আপনার সংযোগটি কোনও সার্ভার বা কোনও ইউআরএল থেকে ডেটা সংগ্রহ করতে পারে তা নিশ্চিত করতে আপনি যদি সত্যিকারের সংযোগ তৈরি করতে চান:

  private boolean isAbleToConnect(String url, int timeout) {
        try {
            URL myUrl = new URL(url);
            URLConnection connection = myUrl.openConnection();
            connection.setConnectTimeout(timeout);
            connection.connect();
            return true;
        } catch (Exception e) {
            Log.i("exception", "" + e.getMessage());
            return false;
        }
    }

এই ফাংশনটি একটি পটভূমির থ্রেডে আবৃত করা দরকার:

final String action = intent.getAction();
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            checkConnectivity(context);
        }
    }


    private void checkConnectivity(final Context context) {
        if (!isNetworkInterfaceAvailable(context)) {
            Toast.makeText(context, "You are OFFLINE!", Toast.LENGTH_SHORT).show();
            return;
        }

        final Handler handler = new Handler();
        new Thread(new Runnable() {
            @Override
            public void run() {
                final boolean isConnected = isAbleToConnect("http://www.google.com", 1000);
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (isConnected)
                            Toast.makeText(context, "You are ONLINE!", Toast.LENGTH_SHORT).show();
                        else
                            Toast.makeText(context, "You are OFFLINE!", Toast.LENGTH_SHORT).show();
                    }
                });

            }
        }).start();

    }

প্রয়োজনীয় অনুমতি যুক্ত করুন:

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

ম্যানিফেস্ট ফাইলটিতে প্রয়োগের আওতায় এই লাইনটি যুক্ত করুন:

android:usesCleartextTraffic="true"

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

<receiver android:name=".ConnectivityChangeReceiver" >
            <intent-filter>

                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>    

আপনার ক্রিয়াকলাপে বিআর নিবন্ধন / নিবন্ধন করুন:

@Override
    protected void onStart() {
        super.onStart();
        IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(connectivityChangeReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(connectivityChangeReceiver);
    }

এটি পুরো সম্প্রচার ক্লাস:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;

import java.net.URL;
import java.net.URLConnection;

public class ConnectivityChangeReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(final Context context, final Intent intent) {

        final String action = intent.getAction();
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            checkConnectivity(context);
        }
    }


    private void checkConnectivity(final Context context) {
        if (!isNetworkInterfaceAvailable(context)) {
            Toast.makeText(context, "You are OFFLINE!", Toast.LENGTH_SHORT).show();
            return;
        }

        final Handler handler = new Handler();
        new Thread(new Runnable() {
            @Override
            public void run() {
                final boolean isConnected = isAbleToConnect("http://www.google.com", 1000);
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (isConnected)
                            Toast.makeText(context, "You are ONLINE!", Toast.LENGTH_SHORT).show();
                        else
                            Toast.makeText(context, "You are OFFLINE!", Toast.LENGTH_SHORT).show();
                    }
                });

            }
        }).start();

    }

    //This only checks if the network interface is available, doesn't guarantee a particular network service is available, for example, there could be low signal or server downtime
    private boolean isNetworkInterfaceAvailable(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    }

    //This makes a real connection to an url and checks if you can connect to this url, this needs to be wrapped in a background thread
    private boolean isAbleToConnect(String url, int timeout) {
        try {
            URL myUrl = new URL(url);
            URLConnection connection = myUrl.openConnection();
            connection.setConnectTimeout(timeout);
            connection.connect();
            return true;
        } catch (Exception e) {
            Log.i("exception", "" + e.getMessage());
            return false;
        }
    }
} 


0

অনুমতি যুক্ত করুন:

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

সংযোগের জন্য যাচাই করার জন্য রিসিভার তৈরি করুন

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {

        if(checkInternet(context))
        {
            Toast.makeText(context, "Network Available Do operations",Toast.LENGTH_LONG).show(); 
        }

    }

    boolean checkInternet(Context context) {
        ServiceManager serviceManager = new ServiceManager(context);
        if (serviceManager.isNetworkAvailable()) {
            return true;
        } else {
            return false;
        }
    }

}

ServiceManager.java

public class ServiceManager {

    Context context;

    public ServiceManager(Context base) {
        context = base;
    }

    public boolean isNetworkAvailable() {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        return networkInfo != null && networkInfo.isConnected();
    }
}

0

1) প্রকাশে: - নীচের কোডের মতো কল রিসিভার করুন

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.safal.checkinternet">

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

    <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"
        tools:ignore="AllowBackup,GoogleAppIndexingWarning">
        <receiver android:name=".NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2) একটি ব্রড কাস্ট রিসিভার ক্লাস করুন: - এই ক্লাসে নেটওয়ার্ক চেকের কোড যুক্ত করুন

package com.safal.checkinternet;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        if (isOnline(context)){
            Toast.makeText(context, "Available", Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(context, "Not Available", Toast.LENGTH_SHORT).show();
        }
    }
    public boolean isOnline(Context context) {

        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        assert cm != null;
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        return (netInfo != null && netInfo.isConnected());
    }    
} 

3) ব্রড কাস্ট রিসিভারটিতে আপনার ক্রিয়াকলাপে কল করুন: -

package com.safal.checkinternet;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//Call Broad cast Receiver 
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(new NetworkChangeReceiver(), filter);
    }
}

-1

সবার আগে আমরা একটি শ্রেণি তৈরি করব যা নেটওয়ার্ক রাজ্যের সংযোগটি পরীক্ষা করবে। সুতরাং একটি ক্লাস তৈরি করা যাক:

public class AppStatus {
    private static AppStatus instance = new AppStatus();
    static Context context;
    ConnectivityManager connectivityManager;
    NetworkInfo wifiInfo, mobileInfo;
    boolean connected = false;

    public static AppStatus getInstance(Context ctx) {
        context = ctx.getApplicationContext();
        return instance;
    }

    public boolean isOnline() {
        try {
            connectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);

            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            connected = networkInfo != null && networkInfo.isAvailable() &&
                    networkInfo.isConnected();
            return connected;


        } catch (Exception e) {
            System.out.println("CheckConnectivity Exception: " + e.getMessage());
            Log.v("connectivity", e.toString());
        }
        return connected;
    }
}

এখন একটি নতুন ব্রডকাস্ট রিসিভার ক্লাস করুন:

public class ConnectivityReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (AppStatus.getInstance(context).isOnline()) {

            Intent intent1=new Intent(context,DisplayAct.class);
            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent1);




        } else {

            Toast.makeText(context, "Please !! Make your network ON", Toast.LENGTH_SHORT).show();

        }
    }
}

এবং এখন আপনার সম্প্রচারিত রিসিভারটি ম্যানিফেস্টে নিবন্ধ করুন:

<receiver android:name=".ConnectivityReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
        </receiver>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.