Broadcast Receiver не получает сообщение - PullRequest
0 голосов
/ 04 ноября 2019

Я создаю два приложения - первое отправляет широковещательную рассылку, второе должно получить ее.

Приложение, которое отправляет:

Разрешения, объявленные в манифесте:

    <permission-group
            android:name="com.example.smbmp1.permissions"
            android:label="my permissions group"/>

    <permission
            android:name="com.example.smbmp1.permissions.PRODUCT_BROADCAST_PERMISSION"
            android:label="PRODUCT_BROADCAST_PERMISSION"
            android:permissionGroup="com.example.smbmp1.permissions"/>

    <uses-permission android:name="com.example.smbmp1.permissions.PRODUCT_BROADCAST_PERMISSION"/>

Фрагмент кода, ответственный за отправку:

    private fun populateProduct(product: Product) {
        Intent().also { intent ->
            intent.action = "com.example.smbmp1.PRODUCT_BROADCAST"
            intent.putExtra("id", product.id)
            intent.putExtra("name", product.name)
            intent.putExtra("price", product.price)
            intent.putExtra("quantity", product.quantity)
            sendBroadcast(intent, Manifest.permission.PRODUCT_BROADCAST_PERMISSION)
        }
    }

Приложение, которое получает:

Зарегистрированный получатель:

        <receiver
                android:name=".ProductReceiver"
                android:enabled="true"
                android:exported="true"
                android:process=":remote"
                android:permission="com.example.smbmp1.permissions.PRODUCT_BROADCAST_PERMISSION">
                <intent-filter >
                    <action android:name="com.example.smbmp1.PRODUCT_BROADCAST" />
                </intent-filter>
        </receiver>

Также объявлен манифест разрешений (я пытался также без объявления ввторое приложение):

    <permission-group
            android:name="com.example.smbmp1.permissions"
            android:label="my permissions group"/>

    <permission
            android:name="com.example.smbmp1.permissions.PRODUCT_BROADCAST_PERMISSION"
            android:label="PRODUCT_BROADCAST_PERMISSION"
            android:permissionGroup="com.example.smbmp1.permissions"/>

    <uses-permission android:name="com.example.smbmp1.permissions.PRODUCT_BROADCAST_PERMISSION"/>

Простой код приемника:

package com.example.smbmp2

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.widget.Toast

class ProductReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        Toast.makeText(context, "Receiver", Toast.LENGTH_LONG).show()
    }
}

Проблема в том, что приемник не запущен. Я прошел через все вопросы переполнения стека, и ни один из ответов не помог. Я пытался установить категорию для намерения, установить флаги и т. Д.

Есть предложения?

РЕДАКТИРОВАТЬ

Я также пытался динамически зарегистрировать Broadcast Receiver:

package com.example.smbmp2

import android.content.IntentFilter
import android.support.v7.app.AppCompatActivity
import android.os.Bundle



class MainActivity : AppCompatActivity() {

    private lateinit var productReceiver: ProductReceiver

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

    override fun onStart() {
        super.onStart()
        productReceiver = ProductReceiver()
        registerReceiver(productReceiver, IntentFilter("com.example.smbmp1.PRODUCT_BROADCAST"), Manifest.permission.PRODUCT_BROADCAST_PERMISSION, null)
    }

    override fun onStop() {
        super.onStop()
        unregisterReceiver(productReceiver)
    }
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Я решил проблему. Прежде всего, я переместил динамическую регистрацию из метода onStart в метод onCreate и отменил регистрацию из onStop в onDestroy. После этого я обновил Android Studio, и это решило проблему.

0 голосов
/ 05 ноября 2019

попробуйте это? https://stackoverflow.com/a/33611355/9392134

вы забыли установить ComponentName для пакета и класса BroadCast Receiver.

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