广播接收器没有收到消息
Broadcast Receiver does not get a message
我正在创建两个应用程序 - 第一个发送广播,第二个应该接收它。
发送的应用:
清单中声明的权限:
<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()
}
}
问题是,接收器没有被触发。我检查了所有堆栈溢出问题,none 的答案有所帮助。我试图将类别设置为意图、设置标志等。
有什么建议吗?
编辑
我也试过动态注册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)
}
}
试试这个?
您忘记为包和 BroadCast 接收器设置 ComponentName class。
我已经解决了问题。首先,我将动态注册从 onStart 方法移动到 onCreate 方法,并将注销从 onStop 方法移动到 onDestroy。之后我升级了 android 工作室,这解决了问题。
我正在创建两个应用程序 - 第一个发送广播,第二个应该接收它。
发送的应用:
清单中声明的权限:
<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()
}
}
问题是,接收器没有被触发。我检查了所有堆栈溢出问题,none 的答案有所帮助。我试图将类别设置为意图、设置标志等。
有什么建议吗?
编辑
我也试过动态注册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)
}
}
试试这个?
您忘记为包和 BroadCast 接收器设置 ComponentName class。
我已经解决了问题。首先,我将动态注册从 onStart 方法移动到 onCreate 方法,并将注销从 onStop 方法移动到 onDestroy。之后我升级了 android 工作室,这解决了问题。