android - ब्रॉडकास्ट रिसीवर को सक्षम और अक्षम करें




broadcastreceiver (2)

खैर, आप मूल रूप से क्या ठीक लगता है। मेरे पास मेरी परियोजनाओं में से एक में निम्न कोड है:

boolean enabled=prefs.getBoolean(key, false);
int flag=(enabled ?
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
ComponentName component=new ComponentName(EditPreferences.this, OnBootReceiver.class);

getPackageManager()
    .setComponentEnabledSetting(component, flag,
                                PackageManager.DONT_KILL_APP);

मैं इसका उपयोग BOOT_COMPLETED रिसीवर को अक्षम करने के लिए करता हूं जब मेरे पास निर्धारित सक्रिय अलार्म नहीं होते हैं।

मेरा अनुमान है कि आपका ComponentName ठीक से स्थापित नहीं है (उदाहरण के लिए, आपका अग्रणी . )। मैं जिस कंस्ट्रक्टर का उपयोग कर रहा हूं उसे आज़माएं, जो एक Context और Class को पैरामीटर के रूप में लेता है।

मैं इस पैकेज प्रबंधक विधि का उपयोग कर प्रसारण रिसीवर को सक्षम और अक्षम करने का प्रयास करता हूं:

setComponentEnabledSetting(componentName,
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP);

प्रसारण रिसीवर मैनिफेस्ट में पंजीकृत है। रिसीवर ठीक काम करता है लेकिन जब मैं इसे अक्षम करने का प्रयास करता हूं, तब भी यह प्रसारण संदेश प्राप्त करता है। जब मैं "एंड्रॉइड: सक्षम =" झूठा "द्वारा मैनिफेस्ट में रिसीवर को अक्षम करता हूं, तो रिसीवर को कुछ भी प्राप्त नहीं होता है लेकिन मैं इसे सक्षम नहीं कर सकता।

मैं एक सेवा के अंदर से विधि को बुलाता हूं।

    PackageManager pm  = getApplicationContext().getPackageManager();
    ComponentName componentName = new ComponentName("com.app",
             ".broadcast_receivers.OnNetworkChangedReceiver");
    pm.setComponentEnabledSetting(componentName,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);

एंड्रॉइड मैनिफेस्ट

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

प्राप्तकर्ता

public class OnNetworkChangedReceiver extends BroadcastReceiver {
private static final String TAG = "OnNetworkChangedReceiver";

@Override
public void onReceive(Context context, Intent intent) {
    Log.d(TAG, "in OnNetworkChanged");
    }
}

मैंने कल एक गतिविधि के अंदर से विधि भी बुलाई। मैंने सोचा कि यह काम करता है लेकिन आज कुछ भी काम नहीं करता है। क्या यह हो सकता है कि कभी-कभी इरादे (android.net.conn.CONNECTIVITY_CHANGE) में बड़ी देरी होती है जिसे मैंने कल रिसीवर को अक्षम करने के रूप में गलत व्याख्या की थी?

क्या पैकेज प्रबंधक के साथ सही दिशा है या क्या विचार में कोई मूल त्रुटि है?

बहुत बहुत धन्यवाद, स्वेन


मुझे लगता है कि पैकेजमैनेजर का उपयोग करना आपकी स्थिति को अधिक सोच रहा है। आपके पास ब्रॉडकास्ट रिसीवर है जिसे कभी-कभी उन प्रसारणों को अनदेखा करने की आवश्यकता होती है जिन्हें वह सुन रहा है। मैं इसके बारे में जाने के दो आसान तरीकों के बारे में सोच सकता हूं:

1) एक ध्वज सेट करें जो आपका रिसीवर प्रसारण को अनदेखा या स्वीकार करने के लिए जांच सकता है, और इसे सक्षम / अक्षम करने के बारे में चिंता न करें।

2) ब्रॉडकास्ट रिसीवर प्रोग्रामेटिक रूप से बनाएं (यहां तक ​​कि केवल एक आंतरिक वर्ग भी हो सकता है), और पंजीकरण और इसे अनधिकृत करें क्योंकि आपको अपने आवेदन के दिए गए हिस्सों की आवश्यकता है।

आम तौर पर मैंने पाया है कि एक्सएमएल के बजाय कोड में मेरे ब्रॉडकास्ट रिसीवर को परिभाषित करने से बहुत अधिक लचीलापन प्रदान किया गया है और मेरे लिए प्रबंधन करना आम तौर पर आसान है।