Статический BroadcastReceiver не работает ANDROID - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь создать статический приемник, но он не работает. Я использую API уровня 25.

AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.example.broadcastreceivertry">

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            tools:ignore="GoogleAppIndexingWarning">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <receiver
                android:name=".ScreenReceiver"
                android:enabled="true"
                android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.SCREEN_ON"/>
                <action android:name="android.intent.action.SCREEN_OFF"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

ScreenReceiver.java

package com.example.broadcastreceivertry;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class ScreenReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("Screen Update", "Screen ON/OFF");
    }

}

MainActivity.kt

package com.example.broadcastreceivertry

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.telephony.SmsManager
import android.widget.Button

class MainActivity : AppCompatActivity() {

    var SCREEN_INTENT = "Screen.Intent"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

После запуска кода он не может принимать трансляции, сделанные системой Android.

Если я динамически регистрирую эти получатели в моем MainActivity, то это не проблема. Но в этом статическом зарегистрированном приемнике я не могу транслировать.

1 Ответ

1 голос
/ 09 июля 2019

Примечание. Если ваше приложение предназначено для уровня API 26 или выше, вы не можете использовать манифест для объявления получателя для неявных широковещательных рассылок (широковещательных рассылок, которые не ориентированы конкретно на ваше приложение), за исключением нескольких неявных широковещательных рассылок, которые исключеныиз этого ограничения.В большинстве случаев вместо этого вы можете использовать запланированные задания.

Это означает, что если вам действительно нужен широковещательный приемник, то вы должны динамически регистрировать и отменять его регистрацию по коду

Как упомянуто @MD этот URL-адрес иллюстрирует, почему это не разрешено и как бороться с этой проблемой.

Android 7.0

Android 7.0 (уровень API 24) и выше donне отправлять следующие системные трансляции:

ACTION_NEW_PICTURE
ACTION_NEW_VIDEO

Кроме того, приложения, ориентированные на Android 7.0 и выше, должны регистрировать трансляцию CONNECTIVITY_ACTION с использованием

registerReceiver (BroadcastReceiver, IntentFilter)

.Объявление получателя в манифесте не работает.

Официальный сайт опишет все изменения в приемнике вещания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...