2012-02-22 9 views
5

मैं इसकैसे BroadcastReceiver को रोकने के लिए मैन्युअल रूप में एंड्रॉयड

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example" android:versionCode="1" android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" 
    android:theme="@android:style/Theme.Light"> 
    <activity android:name=".WiFiDemo" android:label="@string/app_name"> 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name="com.example.WiFiScanReceiver"> 
     <intent-filter> 
     <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 
     </intent-filter> 
    </receiver> 
    </application> 
    <uses-sdk android:minSdkVersion="3" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"> </uses-permission> 
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
<uses-permission android:name="android.permission.INTERNET" /> 
</manifest> 

मैं अन्य अनुप्रयोग इनपुट का उपयोग कर प्रोग्राम इस रिसीवर को रोकने के लिए इस BroadcastReceiver बंद करना चाहते हैं की तरह AndroidManifest.xml में BroadcastReceiver पंजीकृत किया है मेरी?

public class WIFIBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction() 
       .equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { 
      Intent ssIntent = new Intent(context, com.Activity.class); 
      ssIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(ssIntent); 
     } 
    } 
} 

उत्तर :: मैं sharedprefernce चेकबॉक्स जोड़ सकते हैं और दो स्ट्रिंग बचाने के लिए और यहाँ विधि प्राप्त पर में मान्य है मेरी कोड

दूसरा आवेदन:

यहाँ मेरी रिसीवर कोड है :

final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager() 
     .findPreference("checkboxPref"); 
// ... 
checkboxPref 
     .setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 

      public boolean onPreferenceChange(Preference preference, 
        Object newValue) { 
       if (newValue.toString().equals("true")) { 
        // String value = sp.getString(key, null); 
        sharedPreferences = getSharedPreferences(
          PREFS_READ, Context.MODE_WORLD_READABLE); 
        Editor prefsPrivateEditor = sharedPreferences.edit(); 
        prefsPrivateEditor.putString(KEY_READ1, "true"); 
        prefsPrivateEditor.commit(); 
        Toast.makeText(getApplicationContext(), 
          "CB: " + "true", Toast.LENGTH_SHORT).show(); 
       } else { 
        sharedPreferences = getSharedPreferences(
          PREFS_READ, Context.MODE_WORLD_READABLE); 
        Editor prefsPrivateEditor = sharedPreferences.edit(); 
        prefsPrivateEditor.putString(KEY_READ1, "false"); 
        prefsPrivateEditor.commit(); 
        Toast.makeText(getApplicationContext(), 
          "CB: " + "false", Toast.LENGTH_SHORT) 
          .show(); 
       } 
       return true; 
      } 
     }); 

पहले एप्लिकेशन में कोड मान्य करना onReceive विधि के अंदर:

public class WIFIBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction() 
       .equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { 
      sharedPreferences = otherAppsContext.getSharedPreferences(
        PREFS_READ, Context.MODE_WORLD_WRITEABLE); 
      String scaningAction = sharedPreferences.getString(KEY_READ1, null); 
      if (scaningAction.equals("true")) { 
       Intent ssIntent = new Intent(context, com.Activity.class); 
       ssIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(ssIntent); 
      } 
     } 
    } 
} 

यह मेरी ज़रूरत है। लेकिन मैं प्रसारण रिसीवर को अपंजीकृत करने में सक्षम नहीं हूं। गतिविधि के साथ कोई भी उत्तर किसी के लिए सहायक होगा।

उत्तर

1

इस तरह:

PackageManager pm = getPackageManager(); 
pm.setComponentEnabledSetting(WiFiScanReceiver, 
          PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
          PackageManager.DONT_KILL_APP); 
+0

WiFiScan बनाने का तरीका रिसीवर ऑब्जेक्ट? –

+0

यह आपका ब्रॉडकास्ट रिसीवर है जिसे आप पहले बनाते हैं (कोड में आपने संलग्न किया है) – Jviaches

+0

एप्लिकेशन को बैक अप लेने पर फिर से सक्षम करना न भूलें या ऑनसेसिव को – tyczj

0

अधिकतर आप अपने onResume() विधि में अपने BroadCastReceiver रजिस्टर करने के लिए के रूप में यह गतिविधि की Running State है। और हम onPause() के अंदर इसे अनधिकृत कर सकते हैं जो एक गतिविधि के Stopped State है। आप से Broadcast Receivers

+0

पर कॉल न करें, मेरे पास गतिविधि वर्ग नहीं है .. मेरे पास केवल रिसीवर क्लास है .. –

+1

आप साझा किए गए संदर्भों में एक बूलियन रख सकते हैं और ऑनसेसिव() 'if (isTrue) {// execute रिसीवर कोड}' –

+0

के अंदर की स्थिति की जांच कर सकते हैं यदि सही अर्थ है कि बाहर गतिविधि के साथ पंजीकरण कैसे करें? –

2

इसके बारे में अधिक पढ़ सकते हैं आप इस का उपयोग कर सकते हैं:

ComponentName receiver = new ComponentName(context, myReceiver.class); 

PackageManager pm = context.getPackageManager(); 

pm.setComponentEnabledSetting(receiver, 
     PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
     PackageManager.DONT_KILL_APP) 

अधिक जानकारी के here लिए।

0

मुझे लगता है कि वरीयता के साथ कोड कुछ वरीयता गतिविधि में है। तो अपने रिसीवर छोड़ के रूप में यह मूल रूप से किया गया था और की तरह कुछ का उपयोग करें: -

public class YourSettingsActivity extends PreferenceActivity { 

    OnPreferenceChangeListener onPreferenceChangeListener; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     onPreferenceChangeListener = new OnPreferenceChangeListener() { 

      public boolean onPreferenceChange(Preference preference, 
        Object newValue) { 
       if (newValue instanceof Boolean) { 
        final boolean enable = (Boolean) newValue; 
        PackageManager pacman = getPackageManager(); 
        final ComponentName componentName = new ComponentName(
          "com.example.yourapp1", WIFIBroadcastReceiver.class); 
        final int state = (enable) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED 
          : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; 
        pacman.setComponentEnabledSetting(componentName, state, 
          PackageManager.DONT_KILL_APP); 
        Toast.makeText(getApplicationContext(), "CB: " + enable, 
          Toast.LENGTH_SHORT).show(); 
        return true; 
       } 
       return false; 
      } 
     }; 
     @SuppressWarnings("deprecation") 
     final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager() 
       .findPreference("checkboxPref"); 
     checkboxPref.setOnPreferenceChangeListener(onPreferenceChangeListener); 
    } 
} 

आप शायद सुरक्षा अपवादों में चलेंगे here जोड़ने अनुमतियों के लिए देखें:

<!-- Allows an application to change whether an application component (other than 
     its own) is enabled or not. --> 
<permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" 
    android:label="@string/permlab_changeComponentState" 
    android:description="@string/permdesc_changeComponentState" 
    android:protectionLevel="signatureOrSystem" /> 

इसके अलावा, आप लाइन में सावधान रहना होगा होगा :

final ComponentName componentName = new ComponentName(
          "com.example.yourapp1", WIFIBroadcastReceiver.class); 

पोस्ट वापस अगर यह इसे हल

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