2016-08-22 6 views
14

मैं एक sandbox एंड्रॉयड एन आवेदन पत्र में एक रिसीवर को परिभाषित किया है:एंड्रॉइड एन नहीं भेज रहा है android.net.conn.CONNECTIVITY_CHANGE प्रसारण?

<receiver 
    android:exported="true" 
    android:name="com.sandboxapplication.NetworkReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

यह बल्कि सरल है:

public class NetworkReceiver extends BroadcastReceiver { 
    private static final String TAG = NetworkReceiver.class.getName(); 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i(TAG, "Received Network Change event."); 
    } 
} 

यह रिसीवर ठीक काम कर रहा है, तो मेरी build.gradle में मेरी targetSdkVersion फाइल 23. हालांकि है , अगर मैंने अपना लक्ष्य एसडीकेवर्सन 24 पर सेट किया है, तो रिसीवर को कुछ भी प्राप्त नहीं होता है। असल में यदि मैं अपने रिसीवर एंड्रॉइड स्टूडियो में एक डीबग ब्रेक पॉइंट डालता हूं तो मुझे दृश्य संकेत देता है कि ऐसा लगता है कि कक्षा कभी स्मृति में भी लोड नहीं होती है।

क्या मुझे एंड्रॉइड एन दस्तावेज़ीकरण में कुछ मूलभूत याद आया? क्या कनेक्टिविटी चेंज इवेंट्स का पता लगाने का कोई नया तरीका है?

उत्तर

20

एंड्रॉइड N (Nougat) को लक्षित करने वाले ऐप्स CONNECTIVITY_ACTION प्रसारण प्राप्त नहीं करते हैं, भले ही उनके पास इन घटनाओं की अधिसूचना का अनुरोध करने के लिए स्पष्ट प्रविष्टियां हों। यदि वे BroadcastReceiver के साथ अधिसूचना का अनुरोध करते हैं तो वे जो भी चल रहे हैं, वे अभी भी CONNECTIVITY_CHANGE को अपने मुख्य थ्रेड पर सुन सकते हैं।

Android N (Nougat) में क्या बदल गया है यह देखने के लिए। कृपया नीचे दिए गए लिंक का संदर्भ लें। Android N Behaviour Changes

+0

आपको बहुत धन्यवाद, मुझे पता था कि मुझे दस्तावेज़ीकरण में कुछ मूलभूत याद आना चाहिए ... – DanMD

+4

@DanMD शायद यह है क्योंकि https://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION इसका उल्लेख करने के लिए थोड़ा सा प्रयास नहीं करता है ... समय की बर्बादी क्या है। –

+3

कार्य लिंक: https://developer.android.com/about/versions/nougat/android-7.0-changes.html – rmtheis

15

इस कोड का प्रयोग करें, आपके गतिविधि में या आवेदन कक्षा में रिसीवर रजिस्टर करने के लिए

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTI‌​ON); 
registerReceiver(new NetworkConnectionReceiver(), intentFilter); 

कहाँ NetworkConnectionReceiver एक वर्ग BroadcastReceiver के लिए बढ़ा दी है। बस इस कक्षा को अपने ऐप में जोड़ें और ऑनसेसिव (संदर्भ संदर्भ, इरादा मंशा) विधि में कार्रवाई करें।

नोट: यदि गतिविधि में इस रिसीवर को पंजीकृत करें, तो उसे अनधिकृत करना न भूलें।

+0

जहां मुझे यह कोड डालना होगा? –

+0

नौगेट में, क्या ऐप बल बंद होने पर ब्रॉडकास्ट रिसीवर ट्रिगर होगा? – Priya

+0

@ प्रिया नं, जब ऐप बल बंद हो जाता है तो प्रक्रिया समाप्त हो जाती है और कोड में पंजीकृत सबकुछ भी चला जाता है। ऐप को अग्रभूमि में होने पर आपको केवल इस प्रसारण को सुनना चाहिए। – BladeCoder

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