【问题标题】:Broadcast Receiver does not get a message广播接收器没有收到消息
【发布时间】:2019-11-04 19:09:23
【问题描述】:

我正在创建两个应用 - 第一个发送广播,第二个应该得到它。

发送的应用:

清单中声明的​​权限:

    <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()
    }
}

问题是,接收器没有被触发。我经历了所有堆栈溢出问题,但没有一个答案有帮助。我试图将类别设置为意图,设置标志等。

有什么建议吗?

编辑

我也尝试过动态注册广播接收器:

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)
    }
}

【问题讨论】:

  • 自android Oreo以来,您无法接收清单中声明的​​隐式广播。
  • 感谢您的回答。我已经尝试以动态方式注册广播接收器。添加到问题中。

标签: android kotlin broadcastreceiver


【解决方案1】:

试试这个? https://stackoverflow.com/a/33611355/9392134

您忘记使用包和广播接收器类设置 ComponentName。

【讨论】:

    【解决方案2】:

    我已经解决了这个问题。首先,我将动态注册从 onStart 方法移至 onCreate 方法,将取消注册从 onStop 移至 onDestroy。之后我升级了android studio,这解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多