Я не уверен, что это так, но возможно, что вы регистрируете своего получателя в манифесте.
В Android O введены некоторые ограничения при регистрации широковещательных получателей - как правило, вы не можете зарегистрировать неявного получателя в манифесте, за исключением некоторых исключений .
Итак, вам придется либо зарегистрировать своих получателей во время времени выполнения , либо придерживаться явной трансляции (это можно сделать с помощью установкой целевого компонента намерения ).
UPDATE
Здесь вы регистрируете получателя
this.registerReceiver(br, filter);
Но после этого вы создаете новый экземпляр SocketMessageReceiver
и вызываете registerCallback()
для него.
Я думаю, что вы хотите позвонить registerCallback()
в тот же экземпляр, который вы регистрируете для получения трансляций. Кроме того, нет необходимости иметь переменную для ISocketMessageReceiver
, поскольку ваша Activity
реализует ее.
Код, связанный с вашей деятельностью, может быть таким:
class MyActivity extends AppCompatActivity
implements SocketMessageReceiver.ISocketMessageReceiver {
private SocketMessageReceiver mSocketReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
mSocketReceiver = new SocketMessageReceiver();
mSocketReceiver.registerCallback(this);
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
registerReceiver(mSocketReceiver, filter);
}
}
Чем, конечно, вам нужно быть осторожным и отменить регистрацию своей активности в качестве обратного вызова SocketMessageReceiver
в соответствии с обратными вызовами жизненного цикла действия.
В любом случае, этот код предназначен только для иллюстрации идеи, поэтому я не рекомендую использовать его в вашем приложении как есть.