7

के लक्ष्य में बहिष्कृत किया गया है मुझे ब्रॉडकास्ट रिसीवर की बहिष्कृत घोषणा की चेतावनी मिल रही है।CONNECTIVITY_CHANGE एंड्रॉइड एन

<!-- NETWORK RECEIVER... --> 
<receiver android:name=".utils.NetworkUtils" > 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

चेतावनी:

android.net.conn.CONNECTIVITY_CHANGE के लिए एक broadcastreceiver घोषणा को लक्षित एन और उच्च क्षुधा के लिए मान्य नहीं है। आम तौर पर, ऐप्स को इस प्रसारण पर भरोसा नहीं करना चाहिए और इसके बजाय जॉबशेड्यूलर या GCMNetworkManager का उपयोग करना चाहिए।

क्या इसे बिना किसी विधियों के उपयोग करने का कोई और तरीका है?

उत्तर

1

Google की आधिकारिक सलाह JobScheduler पर स्विच करना है। चूंकि यह केवल एपीआई स्तर 21 और उच्चतर से उपलब्ध है, यह पुराने उपकरणों के लिए कोई नहीं है।

सौभाग्य से, Evernote से लोगों की एक पश्चगामी संगतता संस्करण बनाने: https://github.com/evernote/android-job

0

चेतावनी सुराग कि आप काम अनुसूचक उपयोग करने की आवश्यकता को रोकने के लिए लगता है। यहां का इरादा यह है कि एप्लिकेशन कनेक्टिविटी प्राप्त करते समय उन कार्यों के बारे में सिस्टम को इरादे से संवाद नहीं करते हैं, जिन्हें वे करना चाहते हैं। जॉब शेड्यूलर स्पष्ट रूप से इन समस्याओं से बचाता है और यह एंड्रॉइड को अनुरोधों को बैच करने, उन्हें स्थगित करने, और इसी तरह की अनुमति देता है।

चेतावनी यह है कि आपको काम करने के लिए दोनों तरीकों से काम करना होगा क्योंकि जॉब शेड्यूलर केवल एंड्रॉइड 5.0 के बाद उपलब्ध है। हो सकता है कि आप उन पुस्तकालयों का उपयोग कर सकें जो नौकरी शेड्यूलर के मूल कार्यान्वयन पर स्विच करेंगे, another answer उनमें से एक सूचीबद्ध है।

7

मुझे एक ही समस्या थी, मैंने ऐसा कुछ किया। यह मेरे लिए काम करता है, मुझे उम्मीद है कि यह मदद करता है।

public class NewActivity extends AppCompatActivity { 
    final static String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; 
    IntentFilter intentFilter; 
    MyReceiver receiver; 

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

     intentFilter = new IntentFilter(); 
     intentFilter.addAction(CONNECTIVITY_ACTION); 
     receiver = new MyReceiver(); 

     if(checkForInternet()){ 
      loadData(); 
     }else{ 
      updateUI(); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     registerReceiver(receiver, intentFilter); 
    } 

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

    // Self explanatory method 
    public boolean checkForInternet() { 
     ConnectivityManager cm = 
       (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     return activeNetwork != null && 
       activeNetwork.isConnectedOrConnecting(); 
    } 

    void loadData(){ 
     // do sth 
    } 

    void updateUI(){ 
     // No internet connection, update the ui and warn the user 
    } 


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

      String actionOfIntent = intent.getAction(); 
      boolean isConnected = checkForInternet(); 
      if(actionOfIntent.equals(CONNECTIVITY_ACTION)){ 
       if(isConnected){ 
        loadData(); 
       }else{ 
        updateUI(); 
       } 
      } 
     } 
    } 
} 

मैनिफेस्ट में रिसीवर को न जोड़ें ताकि यह केवल इस गतिविधि में रह सके।

+2

धन्यवाद। 'अंतिम स्थिर स्ट्रिंग CONNECTIVITY_ACTION' पहले से ही' android.net में कनेक्ट है। कनेक्टिविटी प्रबंधक 'वर्ग। 'OnCreate()' में आप 'लिख नहीं सकते हैं' अगर (checkForInternet()) {loadData(); ... ', क्योंकि इसे तुरंत ब्रॉडकास्ट रिसीवर से बुलाया जाएगा। – CoolMind

+0

योगदान के लिए धन्यवाद। –

+0

यह काम तब होगा जब ऐप बल बंद हो जाए? – Priya

संबंधित मुद्दे