2013-02-05 16 views
5

प्रारंभ करें और रोकें मैं दो बटनों से प्रसारण रिसीवर को शुरू और बंद करना चाहता हूं। मैंने इसके लिए दो बटन श्रोताओं में कोड लिखा था।प्रसारण रिसीवर

startButton में मैं रिसीवर दर्ज की के रूप में

 startCallBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      startCallBtn.setVisibility(View.INVISIBLE); 
      stopCallBtn.setVisibility(View.VISIBLE); 


      //register call receiver. 
      registerReceiver(callReceiver, new IntentFilter(
      "android.intent.action.CALL")); 
      System.out.println("Registered Call Receiver Perfectly"); 
     } 
    }); 

इस प्रकार मैं

के रूप में बंद रिसीवर के लिए कॉल लिखा है एक स्टॉप बटन में के लिए कोड लिखा है -:

कोड इस प्रकार है

stopCallBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      stopCallBtn.setVisibility(View.INVISIBLE); 
      startCallBtn.setVisibility(View.VISIBLE); 
      stopService(new Intent(MainActivity.this, SpeakOut.class)); 
      FileOutputStream fos; 

      //Unregister sms receivers 
      unregisterReceiver(callReceiver); 
      System.out.println("Unregistered Call Broadcast Receiver"); 
     } 
    }); 

अभी भी श्रोता कॉल कर रहा है जब नई कॉल प्राप्त हो रही है

+0

आप Manifest.xml में भी इस रिसीवर डाला? –

उत्तर

3

में प्रकट

<receiver android:name="your receiver name"> 

मुख्य गतिविधि

BroadcastReceiver br = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.w("Check", "Inside On Receiver"); 
      Toast.makeText(getApplicationContext(), "received", Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(BROADCAST_ACTION); 
     filter.addCategory(Intent.CATEGORY_DEFAULT); 
     registerReceiver(br, filter); 

    } 

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

आप .. enable और disableBroadcastReceiver ..मैं आशा है कि यह आप में मदद मिलेगी के लिए इस कोड की कोशिश कर सकते

public void enableBroadcastReceiver(View view) 
{ 

    ComponentName receiver = new ComponentName(this, AlarmManagerBroadcastReceiver.class); 
    PackageManager pm = this.getPackageManager(); 

    pm.setComponentEnabledSetting(receiver, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
      PackageManager.DONT_KILL_APP); 
    Toast.makeText(this, "Enabled broadcast receiver", Toast.LENGTH_SHORT).show(); 
    } 
    /** 
    * This method disables the Broadcast receiver registered in the AndroidManifest file. 
    * @param view 
    */ 
    public void disableBroadcastReceiver(View view){ 
    ComponentName receiver = new ComponentName(this, AlarmManagerBroadcastReceiver.class); 
    PackageManager pm = this.getPackageManager(); 
     pm.setComponentEnabledSetting(receiver, 
      PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
      PackageManager.DONT_KILL_APP); 
    Toast.makeText(this, "Disabled broadcst receiver", Toast.LENGTH_SHORT).show(); 
    } 
1

मेक सुनिश्चित करें कि आप sa के unregisterReceiver() पर कॉल कर रहे हैं मुझे receiver ऑब्जेक्ट जिस पर आपने registerReceiver() कहा है। यदि आप इसे रिलीज़ करने से पहले एक ही रिसीवर के लिए नई ऑब्जेक्ट बना रहे हैं, तो पुरानी रिसीवर ऑब्जेक्ट जो पंजीकृत है, अब इसे अनियंत्रित नहीं किया जा सकता है क्योंकि आपने इसे नया मेमोरी ब्लॉक आवंटित किया है।

उदाहरण के लिए, ऐसा करते हैं:

MyBroadcastReceiver receiver = new MyBroadCastReceiver(); 
registerReceiver(receiver); 
unregisterReceiver(receiver); 

receiver = new MyBraodCastReceiver(); 
संबंधित मुद्दे