Приемник широковещательной рассылки для устройств naught и Oreo + не работает - PullRequest
0 голосов
/ 17 сентября 2018
public class ScreenReceiver extends BroadcastReceiver {

    private boolean screenOff;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))    {
            screenOff = true;
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            screenOff = false;
        }

    }


   <receiver
             android:name=".ScreenReceiver"
             android:enabled="true"
             android:exported="true">
             <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
                 <action android:name="android.intent.action.DREAMING_STARTED" />
                <action android:name="android.intent.action.DREAMING_STOPPED" />
                 <action android:name="android.intent.action.CLOSE_SYSTEM_DIALOGS" />
                 <action android:name="android.intent.action.SCREEN_ON" />
                 <action android:name="android.intent.action.SCREEN_OFF" />
                <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
                 <action android:name="android." />
             </intent-filter>
        </receiver>

Не получая никакого обратного вызова на устройствах naught и oreo, пробовал на устройствах с зефиром его работоспособность. Но на устройствах oreo он не работает, а также при подключенном аккумуляторе и приемнике изменений сети.

1 Ответ

0 голосов
/ 17 сентября 2018

Вы не можете зарегистрировать широковещательный приемник в manifest.xml от Oreo.Вы можете видеть Изменения в поведении Android 8.0

Приложения не могут использовать свои манифесты для регистрации в большинстве неявных трансляций (то есть трансляций, которые не предназначены специально для приложения).

Решение

Вместо этого зарегистрируйте своего получателя в связанной деятельности.Вот так.

public class MainActivity extends AppCompatActivity {
    BroadcastReceiver receiver;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction("android.intent.action.LOCKED_BOOT_COMPLETED");
        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // todo
            }
        };
        registerReceiver(receiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (receiver != null)
            unregisterReceiver(receiver);
    }
}

Вы можете добавить действие в виде строки, как в манифесте, если вы не нашли соответствующую строку констант.

...