Two choices
1) If you want to read Broadcast only when the Activity is visible
  then,
registerReceiver(...) in onStart() and unregisterReceiver(...) in onStop()
2) If you want to read Broadcast even if Activity is in Background
  then,
registerReceiver(...) in onCreate(...) and unregisterReceiver(...) in onDestroy()
Bonus:
If you are lazy
If you don't want to write boilerplate code for registering and unregistering a BroadcastReceiver again and again in each Activity then,
- Create an abstract Activity
- Write boilerplate code in Activity
- Leave the implementation as abstract methods
Here is the code snippet:
Abstract Activity
public abstract class BasicActivity extends AppCompatActivity {
    private BroadcastReceiver broadcastReceiver;
    private IntentFilter filter;
    private static final String TAG = "BasicActivity";
    /**********************************************************************
    *                   Boilerplate code
    **********************************************************************/
    @Override
    public void onCreate(Bundle sis){
        super.onCreate(sis);
        broadcastReceiver = getBroadcastReceiver();
        filter = getFilter();
    }
    @Override
    public void onStart(){
        super.onStart();
        register();
    }
    @Override
    public void onStop(){
        super.onStop();
        unregister();
    }
    private void register(){
        registerReceiver(broadcastReceiver,filter);
    }
    private void unregister(){
        unregisterReceiver(broadcastReceiver);
    }
    /**********************************************************************
    *                   Abstract methods
    **********************************************************************/
    public abstract BroadcastReceiver getBroadcastReceiver();
    public abstract IntentFilter getFilter();
}
Using this approach you can write more boilerplate code such as
  writing common animations, binding to a service, etc.
See full code:
HERE