У меня есть код устаревшего кода, который я разрешаю для Marshmallow.
Существует широковещательная передача с использованием разрешения PHONE_STATE следующим образом:
<receiver android:name="redacted.TheBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"></action>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Если предоставляется разрешение PHONE_STATE, но затем пользователь отрицает, когда есть телефонный звонок, возникает связанный с разрешением сбой. Но авария происходит до того, как вызывается Broadcast Receiver onReceive() (авария в android.app.ActivityThread.handleReceiver). Это означает, что широковещательный приемник не может даже проверить, предоставлено ли разрешение или нет, и справиться с этой ситуацией.
Итак, мой вопрос: если есть широковещательный приемник, такой как это, как код может касаться ситуации, когда пользователь отключил разрешение, потому что AFAIK не имеет API для контроля за изменениями разрешений по мере их возникновения, поэтому код не может знать "на лету", что разрешение было отменено, и поэтому он не может отменить регистрацию своего широковещательного приемника.