Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use registerReceiver method?

I want to use dynamically registered BroadcastReceiver that has a reference to an Activity so it can modify its UI. I am using Context.registerReceiver() method but receiver's onReceive() method is never called.

Here is the sample code showing the problem:

package com.example;  import android.app.Activity; import android.app.IntentService; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent;  public class RegisterBroadcastReceiver extends Activity {      public static class MyIntentService extends IntentService {          public MyIntentService() {             super(MyIntentService.class.getSimpleName());         }          @Override         protected void onHandleIntent(Intent intent) {             Intent i = new Intent(this, MyBroadcastReceiver.class);             sendBroadcast(i);         }     }      public class MyBroadcastReceiver extends BroadcastReceiver {          @Override         public void onReceive(Context context, Intent intent) {             Log.i(MyBroadcastReceiver.class.getSimpleName(),                   "received broadcast");         }      }      /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);     }      MyBroadcastReceiver mReceiver = new MyBroadcastReceiver();      @Override     protected void onResume() {         super.onResume();          IntentFilter intentFilter = new IntentFilter();         registerReceiver(mReceiver, intentFilter);     }      @Override     public boolean onKeyDown(int keyCode, KeyEvent event) {         if (keyCode == KeyEvent.KEYCODE_MENU) {             Intent i = new Intent(this, MyIntentService.class);             startService(i);         }         return super.onKeyDown(keyCode, event);     }      @Override     protected void onPause() {         super.onPause();         unregisterReceiver(mReceiver);     }  } 
like image 547
Urboss Avatar asked Nov 09 '10 13:11

Urboss


People also ask

What are the two parameters taken by registerReceiver () method *?

Parameters. The BroadcastReceiver to handle the broadcast. Selects the Intent broadcasts to be received. String naming a permissions that a broadcaster must hold in order to send an Intent to you.

What is the role of the onReceive () method in the BroadcastReceiver?

Retrieve the current result extra data, as set by the previous receiver. This can be called by an application in onReceive(Context, Intent) to allow it to keep the broadcast active after returning from that function.

Which method do we need to invoke when extending a class with BroadcastReceiver?

1.2.registerReceiver() method. The implementing class for a receiver extends the BroadcastReceiver class. If the event for which the broadcast receiver has registered happens, the onReceive() method of the receiver is called by the Android system.


1 Answers

The whole code if somebody need it.

void alarm(Context context, Calendar calendar) {     AlarmManager alarmManager = (AlarmManager)context.getSystemService(ALARM_SERVICE);      final String SOME_ACTION = "com.android.mytabs.MytabsActivity.AlarmReceiver";     IntentFilter intentFilter = new IntentFilter(SOME_ACTION);      AlarmReceiver mReceiver = new AlarmReceiver();     context.registerReceiver(mReceiver, intentFilter);      Intent anotherIntent = new Intent(SOME_ACTION);     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, anotherIntent, 0);     alramManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);      Toast.makeText(context, "Added", Toast.LENGTH_LONG).show(); }  class AlarmReceiver extends BroadcastReceiver {          @Override     public void onReceive(Context context, Intent arg1) {         Toast.makeText(context, "Started", Toast.LENGTH_LONG).show();     } } 
like image 172
Mike Avatar answered Sep 20 '22 07:09

Mike