Android में WIFI Connection कब स्थापित किया गया है, इसका पता कैसे लगाएं?


140

मुझे यह पता लगाने की आवश्यकता है कि मेरे पास वाईफ़ाई पर नेटवर्क कनेक्टिविटी कब है। क्या एक वैध नेटवर्क कनेक्शन बनाया गया है यह स्थापित करने के लिए प्रसारण भेजा जाता है। मुझे यह सत्यापित करने की आवश्यकता है कि HTTP के लिए एक वैध नेटवर्क कनेक्शन मौजूद है। मुझे क्या सुनना चाहिए और मुझे कौन से अतिरिक्त परीक्षणों की आवश्यकता है ताकि यह पता चल सके कि वैध कनेक्शन मौजूद है।


इस सवाल के कुछ हिस्सों का जवाब यहाँ दिया गया है जिसमें मैंने पाया: stackoverflow.com/questions/4238921/…
Androider

1
लेकिन इन शर्तों की जाँच करने के लिए अभी भी WHEN का सवाल क्या है?
एंड्रॉइड

1
मैं इस पर प्रतिक्रिया चाहूंगा कि क्या प्रसारण होते हैं जो प्रसारण रिसीवर द्वारा पकड़े जा सकते हैं?
Androider

1
एंड्रॉइड ओ पर मैं इसे कैसे कर सकता हूं क्योंकि android.net.wifi.STATE_CHANGE जैसे अंतर्निहित प्रसारण रिसीवर अब प्रकट में पंजीकृत होने की अनुमति नहीं दी जाएगी ( डेवलपर . android.com/guide/compenders/… देखें )। यदि हम इसे एप्लिकेशन एक्टिविटी में दर्ज करते हैं (onCreate कहते हैं), तो इसे onStop () में deregistered करना होगा, और हम अब wifi से संबंधित इवेंट प्राप्त नहीं करेंगे
zafar142003

जवाबों:


126

BroadcastReceiverवाईफाई कनेक्शन स्थापित होने पर (या यदि कनेक्शन बदल गया है) तो आप अधिसूचित होने के लिए रजिस्टर कर सकते हैं ।

रजिस्टर करें BroadcastReceiver:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
registerReceiver(broadcastReceiver, intentFilter);

और फिर अपने BroadcastReceiverकुछ इस तरह से करें:

@Override
public void onReceive(Context context, Intent intent) {
    final String action = intent.getAction();
    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
        if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)) {
            //do stuff
        } else {
            // wifi connection was lost
        }
    }
}

अधिक जानकारी के लिए, के लिए प्रलेखन देखें BroadcastReceiverऔरWifiManager

बेशक आपको यह जांचना चाहिए कि क्या डिवाइस इससे पहले ही वाईफाई से जुड़ा है।

EDIT: प्रतिबंध-जियोइंजीनियरिंग के लिए धन्यवाद, यहां यह जांचने की एक विधि है कि क्या उपकरण पहले से जुड़ा हुआ है:

private boolean isConnectedViaWifi() {
     ConnectivityManager connectivityManager = (ConnectivityManager) appObj.getSystemService(Context.CONNECTIVITY_SERVICE);
     NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);     
     return mWifi.isConnected();
}

1
SUPPLICANT_CONECTION_CHANGE_ACTION क्यों? मुझे लगा कि यह सिर्फ CONNECTION_CHANGE परिवर्तन प्रसारण है। क्यों SUPPLCANT ??? धन्यवाद
Androider

2
है ना? मुझे कनेक्शन_चेंज नामक एक क्रिया नहीं दिख रही है ...? मैं केवल वाईफाई स्टेट को बदला हुआ देख रहा हूं लेकिन यह क्रिया केवल यह बताती है कि वाईफाई सक्षम है या नहीं (या एन- / डिसेबल) नहीं है कि क्या यह जुड़ा हुआ है ... क्या supplicant_connection_change_action क्या आप की आवश्यकता नहीं है?
jpm

9
मेरे लिए WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION उस स्थिति में काम नहीं करता जब किसी ज्ञात वाईफाई स्टेशन का कनेक्शन स्थापित / खो गया हो। लेकिन WifiManager.NETWORK_STATE_CHANGED_ACTION काम करता है।
यार

1
"android.net.wifi.STATE_CHANGE" ने मेरे लिए काम किया। नीचे दिए गए मेरे जवाब की जाँच करें
एम। उस्मान खान

1
"निश्चित रूप से आपको यह जांचना चाहिए कि क्या डिवाइस इससे पहले ही वाईफाई से जुड़ा है।" - तो, ​​प्रारंभिक वाई-फाई राज्य प्राप्त करने के लिए, आप इस विधि का उपयोग कर सकते हैं ...private boolean isConnectedViaWifi() { ConnectivityManager connectivityManager = (ConnectivityManager) appObj.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return mWifi.isConnected(); }
प्रतिबंध-जियोइंजीनियरिंग

106

मेरे लिए सबसे अच्छा काम:

AndroidManifest

<receiver android:name="com.AEDesign.communication.WifiReceiver" >
   <intent-filter android:priority="100">
      <action android:name="android.net.wifi.STATE_CHANGE" />
   </intent-filter>
</receiver>

ब्रॉडकास्टसीवर वर्ग

public class WifiReceiver extends BroadcastReceiver {

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

      NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
      if(info != null && info.isConnected()) {
        // Do your work. 

        // e.g. To check the Network Name or other info:
        WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        String ssid = wifiInfo.getSSID();
      }
   }
}

अनुमतियां

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

1
मुझे लगता है कि यह विशेष रूप से वाईफाई स्टेट चेज के लिए सबसे अच्छा जवाब है। धन्यवाद
मिकेल

4
भविष्य के आसान संदर्भ के लिए, वह हार्डकोड कार्रवाई WifiManager.netWORK_STATE_CHANGED_ACTION है
अनॉसेज

3
if (जानकारी! = null && info.isConnected ()) = कोई स्पेगेटी नहीं।
gswierczynski

1
क्या हमें मुख्य गतिविधि में प्रसारण भेजने के लिए कोई कोड लिखने की आवश्यकता है ??
निसारी बालकृष्णन

1
एंड्रॉइड ओ पर मैं इसे कैसे कर सकता हूं क्योंकि android.net.wifi.STATE_CHANGE जैसे अंतर्निहित प्रसारण रिसीवर अब प्रकट में पंजीकृत होने की अनुमति नहीं दी जाएगी ( डेवलपर . android.com/guide/compenders/… देखें )। यदि हम इसे एप्लिकेशन गतिविधि (onCreate कहते हैं) में पंजीकृत करते हैं, तो इसे onStop () में deregistered होना होगा, और हम अब वाईफाई से संबंधित घटनाओं को प्राप्त नहीं करेंगे।
zafar142003

18

मेरे लिए केवल WifiManager.NETWORK_STATE_CHANGED_ACTIONकाम करता है।

एक प्रसारण रिसीवर पंजीकृत करें:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(broadcastReceiver, intentFilter);

और प्राप्त करें:

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

    final String action = intent.getAction();

    if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
        NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
        boolean connected = info.isConnected();

        //call your method
    }      
}

1
मेरे लिए और साथ ही केवल WifiManager.netWORK_STATE_CHANGED_ACTION ने काम किया, केवल इस कारण से कोई स्पष्टीकरण क्यों काम करेगा?
बेंच जू

11

उपयोगकर्ता @JPM और @usman द्वारा दिए गए उत्तर वास्तव में बहुत उपयोगी हैं। यह ठीक काम करता है, लेकिन मेरे मामले में यह मेरे मामले में onReceiveकई बार 4 बार आता है इसलिए मेरा कोड कई बार निष्पादित होता है।

मैं अपनी आवश्यकता के अनुसार कुछ संशोधन करता हूं और बनाता हूं और अब यह केवल 1 बार आता है

यहाँ प्रसारण के लिए जावा वर्ग है।

public class WifiReceiver extends BroadcastReceiver {

String TAG = getClass().getSimpleName();
private Context mContext;

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

    mContext = context;


    if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {

        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();

        if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI &&
                networkInfo.isConnected()) {
            // Wifi is connected
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            String ssid = wifiInfo.getSSID();

            Log.e(TAG, " -- Wifi connected --- " + " SSID " + ssid );

        }
    }
    else if (intent.getAction().equalsIgnoreCase(WifiManager.WIFI_STATE_CHANGED_ACTION))
    {
        int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
        if (wifiState == WifiManager.WIFI_STATE_DISABLED)
        {
            Log.e(TAG, " ----- Wifi  Disconnected ----- ");
        }

    }
}
}

AndroidManifest में

<receiver android:name=".util.WifiReceiver" android:enabled="true">
        <intent-filter>
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
    </receiver>


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

1
wifiState क्या है?
२३:१६

1
यह भी जानना चाहेंगे कि wifiState क्या है, यह कैसे उत्पन्न हुई थी
इवान पार्सन्स

1
@behelit अब "wifiState" संपादित उत्तर में है।
योग गुरु

8

आप कर सकते हैं एक वाईफ़ाई कनेक्शन प्रारंभ करता है, तो आप उपयोगकर्ता हर बार पूछने का सामान्य व्यवहार ओवरराइड करने के लिए एक विकल्प दे।

मैं तीन तरीकों का उपयोग करने का चयन करता हूं ...

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

अगर वाईफाई या सेलडॉट या तो इंटरनेट कनेक्ट है तो यह त्वरित जांच है। यहां से आप यह चुन सकते हैं कि आप क्या कार्रवाई करना चाहते हैं। क्या यह एयरप्लेन मोड में भी चेक किया जाना चाहिए।

एक अलग धागे पर। मैं एक चर IpAddress = "" पर सेट करता हूं और तब तक सर्वेक्षण करता हूं जब तक कि मेरे पास एक वैध आईपी पता न हो।

  WifiManager wifi;
  wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
  WifiInfo wifiInfo = wifi.getConnectionInfo();
  int ipAddress = wifiInfo.getIpAddress();
  String ip = null;
  ip = String.format("%d.%d.%d.%d",
  (ipAddress & 0xff),
  (ipAddress >> 8 & 0xff),
  (ipAddress >> 16 & 0xff),
  (ipAddress >> 24 & 0xff));
  Log.e(" >>IP number Begin ",ip);

एक और कोड स्निपेट ... यदि इसका चालू नहीं होता है (उपयोगकर्ताओं की पूर्व अनुमति के साथ)

   if(wifi.isWifiEnabled()!=true)wifi.setWifiEnabled(true);  

7

वाईफ़ाई कनेक्शन राज्य का पता लगाने के लिए, मैंने ConnectivityManager वर्ग से CONNECTIVITY_ACTION का उपयोग किया है:

    IntentFilter filter=new IntentFilter();
    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(receiver, filter);

और आपके ब्रॉडकास्टरीवर से:

    if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
        int networkType = intent.getIntExtra(
                android.net.ConnectivityManager.EXTRA_NETWORK_TYPE, -1);
        if (ConnectivityManager.TYPE_WIFI == networkType) {
            NetworkInfo networkInfo = (NetworkInfo) intent
                    .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if (networkInfo != null) {
                if (networkInfo.isConnected()) {

                    // TODO: wifi is connected
                } else {
                    // TODO: wifi is not connected
                }
            }
        }

    }

ps: मेरे लिए ठीक काम करता है :)


1
fyi, Android 6 के साथ जब आपके पास वैध सेल डेटा कनेक्शन होता है, तो वाईफाई स्थिति में परिवर्तन CONNECTIVITY_ACTION को ट्रिगर नहीं करेगा। कनेक्टिविटी स्टेट को प्रभावित करने का एकमात्र कारण था, अब ऐसा नहीं है।
ब्रूस

5

इस कोड को अनुमति की आवश्यकता नहीं है। यह केवल वाई-फाई नेटवर्क कनेक्टिविटी राज्य परिवर्तनों (किसी अन्य नेटवर्क को ध्यान में नहीं रखा गया है) तक सीमित है। रिसीवर स्थिर AndroidManifest.xml फ़ाइल में प्रकाशित हुआ है और के रूप में यह प्रणाली द्वारा सक्रिय किया जाएगा निर्यात किए जाने की जरूरत नहीं है protected broadcast, NETWORK_STATE_CHANGED_ACTIONहर नेटवर्क कनेक्टिविटी स्थिति परिवर्तन पर।

AndroidManifest:

<receiver
    android:name=".WifiReceiver"
    android:enabled="true"
    android:exported="false">

    <intent-filter>
        <!--protected-broadcast: Special broadcast that only the system can send-->
        <!--Corresponds to: android.net.wifi.WifiManager.NETWORK_STATE_CHANGED_ACTION-->
        <action android:name="android.net.wifi.STATE_CHANGE" />
    </intent-filter>

</receiver>

ब्रॉडकास्टसीवर श्रेणी:

public class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/*
 Tested (I didn't test with the WPS "Wi-Fi Protected Setup" standard):
 In API15 (ICE_CREAM_SANDWICH) this method is called when the new Wi-Fi network state is:
 DISCONNECTED, OBTAINING_IPADDR, CONNECTED or SCANNING

 In API19 (KITKAT) this method is called when the new Wi-Fi network state is:
 DISCONNECTED (twice), OBTAINING_IPADDR, VERIFYING_POOR_LINK, CAPTIVE_PORTAL_CHECK
 or CONNECTED

 (Those states can be obtained as NetworkInfo.DetailedState objects by calling
 the NetworkInfo object method: "networkInfo.getDetailedState()")
*/
    /*
     * NetworkInfo object associated with the Wi-Fi network.
     * It won't be null when "android.net.wifi.STATE_CHANGE" action intent arrives.
     */
    NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

    if (networkInfo != null && networkInfo.isConnected()) {
        // TODO: Place the work here, like retrieving the access point's SSID

        /*
         * WifiInfo object giving information about the access point we are connected to.
         * It shouldn't be null when the new Wi-Fi network state is CONNECTED, but it got
         * null sometimes when connecting to a "virtualized Wi-Fi router" in API15.
         */
        WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
        String ssid = wifiInfo.getSSID();
    }
}
}

अनुमतियां:

None

1
<API 26 चलाने वाले उपकरणों में काम करता है। जैसा कि @Isham ने सुझाव दिया है कि कार्रवाई अब Android O
tiagocarvalho92

3

यहां मेरे कोड का एक उदाहरण है, जो वाईफ़ाई से कनेक्ट होने पर केवल अनुमति देने वाले उपयोगकर्ताओं की वरीयता को ध्यान में रखता है।

IntentServiceसामान डाउनलोड करने का प्रयास करने से पहले मैं अंदर से इस कोड को कॉल कर रहा हूं।

ध्यान दें कि किसी भी तरह का नेटवर्क कनेक्शन न NetworkInfoहोने पर होगा null

private boolean canConnect()
{
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    boolean canConnect = false;
    boolean wifiOnly = SharedPreferencesUtils.wifiOnly();

    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if(networkInfo != null)
    {
        if(networkInfo.isConnected())
        {
            if((networkInfo.getType() == ConnectivityManager.TYPE_WIFI) ||
               (networkInfo.getType() != ConnectivityManager.TYPE_WIFI && !wifiOnly))
            {
                canConnect = true;
            }
        }
    }

    return canConnect;
}

3

Android O ने वाईफ़ाई स्थिति परिवर्तन के लिए निहित प्रसारण प्राप्त करने की संभावना को हटा दिया। इसलिए यदि आपका ऐप बंद है, तो आप उन्हें प्राप्त नहीं कर पाएंगे। नया WorkManagerआपके ऐप के बंद होने पर चलने की क्षमता रखता है, इसलिए मैंने इसके साथ थोड़ा प्रयोग किया है और यह काफी अच्छा काम करता है:

इसे अपनी निर्भरता में जोड़ें:

implementation "android.arch.work:work-runtime:1.0.0-alpha08"

WifiConnectWorker.kt

class WifiConnectWorker : Worker() {

    override fun doWork(): Result {
        Log.i(TAG, "I think we connected to a wifi")
        return Result.SUCCESS
    }
}

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)

        val workManager = WorkManager.getInstance()

        // Add constraint to start the worker when connecting to WiFi
        val request = OneTimeWorkRequest.Builder(WifiConnectWorker::class.java)
            .setConstraints(Constraints.Builder()
                .setRequiredNetworkType(UNMETERED)
                .build())
            .build()

        // The worker should be started, even if your app is closed
        workManager.beginUniqueWork("watch_wifi", REPLACE, request).enqueue()
    }
}

ध्यान रखें कि यह केवल एक बार की अधिसूचना के लिए एक त्वरित परीक्षा थी। वाईफाई चालू और बंद होने पर हमेशा सूचित करने के लिए और अधिक काम करना है।

पुनश्च: जब एप्लिकेशन को बल छोड़ दिया जाता है , तो कार्यकर्ता शुरू नहीं होता WorkManagerहै , ऐसा लगता है कि अनुरोधों को रद्द कर रहा है।


क्या मेरा ऐप ज़ब्त होने की स्थिति में भी कार्यकर्ता को शुरू करने का कोई तरीका है। कार्य प्रबंधक .setRequiredNetworkType (UNMETERED) के साथ तभी काम कर रहा है जब ऐप खुला हो। क्या कार्यकर्ता को ट्रिगर करने का कोई तरीका है यहां तक ​​कि ऐप को मार डाला गया है (बल बंद राज्य)। क्योंकि निहित व्यापक कास्ट रिसीवर भी कुछ हद तक प्रतिबंधित है। सबसे अच्छा विकल्प क्या होगा?
सुरेश

2

मैंने इस कोड का उपयोग किया है:

public class MainActivity extends Activity
    {
    .
    .
    .
    @Override
    protected void onCreate(Bundle savedInstanceState)
        {
        super.onCreate(savedInstanceState);
        .
        .
        .
        }

    @Override
    protected void onResume()
        {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
        registerReceiver(broadcastReceiver, intentFilter);  
        }

    @Override
    protected void onPause()
        {
        super.onPause();
        unregisterReceiver(broadcastReceiver);
        }

    private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver()
        {
        @Override
        public void onReceive(Context context, Intent intent)
            {
            final String action = intent.getAction();
            if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION))
                {
                if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false))
                    {
                    // wifi is enabled
                    }
                else
                    {
                    // wifi is disabled
                    }
                }
            }
        };
    }

2

मेरे पास आवेदन संदर्भ प्राप्त करने वाले वाईफ़ाई कनेक्शन का पता लगाने के लिए दो तरीके हैं:

1) मेरा पुराना तरीका

public boolean isConnectedWifi1(Context context) {
    try {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();           
        if (networkInfo != null) {
            NetworkInfo[] netInfo = connectivityManager.getAllNetworkInfo();
            for (NetworkInfo ni : netInfo) {
                if ((ni.getTypeName().equalsIgnoreCase("WIFI"))
                        && ni.isConnected()) {
                    return true;
                }                   
            }
        }
        return false;
    } catch (Exception e) {
        Log.e(TAG, e.getMessage());
    }
    return false;
}

2) मेरी नई विधि (वर्तमान में मैं इस पद्धति का उपयोग कर रहा हूं):

public boolean isConnectedWifi(Context context) {
         ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);     
         return networkInfo.isConnected();
}

एंड्रॉइड ओ पर मैं इसे कैसे कर सकता हूं क्योंकि android.net.wifi.STATE_CHANGE जैसे अंतर्निहित प्रसारण रिसीवर अब प्रकट में पंजीकृत होने की अनुमति नहीं दी जाएगी ( डेवलपर . android.com/guide/compenders/… देखें )। यदि हम इसे एप्लिकेशन एक्टिविटी में दर्ज करते हैं (onCreate कहते हैं), तो इसे onStop () में डीरिजिस्टर करना होगा, और हम अब wifi से संबंधित ईवेंट प्राप्त नहीं करेंगे
zafar142003

2

उन सभी लोगों के लिए जो CONNECTIVITY_CHANGE प्रसारण का आनंद ले रहे हैं , कृपया ध्यान दें कि जब ऐप एंड्रॉइड O में बैकग्राउंड में हो तो यह अधिक फायर नहीं होगा।

https://developer.android.com/about/versions/o/background.html


2

1) मैंने ब्रॉडकास्ट रिसीवर के दृष्टिकोण की कोशिश की, हालांकि मुझे पता है कि CONNECTIVITY_ACTION / CONNECTIVITY_CHANGE को API 28 में पदावनत किया गया है और अनुशंसित नहीं है। स्पष्ट रजिस्टर का उपयोग करने के लिए भी बाध्य है, यह तब तक सुनता है जब तक ऐप चल रहा है।

2) मैंने फायरबेस डिस्पैचर की भी कोशिश की, जो काम करता है, लेकिन मारे गए ऐप से परे नहीं।

3) अनुशंसित तरीका पाया गया कि कार्यपालक को मारे गए प्रक्रिया से परे निष्पादन की गारंटी है और आंतरिक रूप से registerNetworkRequest () का उपयोग कर

# 3 दृष्टिकोण के पक्ष में सबसे बड़ा सबूत एंड्रॉइड डॉक्टर द्वारा ही संदर्भित है। खासतौर पर बैकग्राउंड में ऐप्स के लिए।

इसके अलावा यहां

एंड्रॉइड 7.0 में हम तीन आमतौर पर उपयोग किए जाने वाले निहित प्रसारण - CONNECTIVITY_ACTION, ACTION_NEW_PICTURE, और ACTION_NEW_VIDEO निकाल रहे हैं - क्योंकि वे एक ही बार में कई ऐप की पृष्ठभूमि प्रक्रियाओं को जगा सकते हैं और मेमोरी और बैटरी को स्ट्रेच कर सकते हैं। यदि आपका ऐप इन्हें प्राप्त कर रहा है, तो इसके बजाय जॉबस्किड्यूलर और संबंधित एपीआई पर माइग्रेट करने के लिए एंड्रॉइड 7.0 का लाभ उठाएं।

अब तक यह हमारे लिए समय-समय पर काम करने वाले अनुरोध का उपयोग करके ठीक काम करता है।

अद्यतन: मैंने इसके बारे में 2 श्रृंखला मध्यम पोस्ट लिखना समाप्त कर दिया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.