未运行时接收消息,Xamarin Android上的显式广播和隐式广播
我下面的代码不适用于Android8.0+,但适用于8.0之前的版本。 因此,它似乎被视为隐式广播未运行时接收消息,Xamarin Android上的显式广播和隐式广播,android,android-intent,xamarin.android,broadcastreceiver,android-broadcast,Android,Android Intent,Xamarin.android,Broadcastreceiver,Android Broadcast,我下面的代码不适用于Android8.0+,但适用于8.0之前的版本。 因此,它似乎被视为隐式广播 [BroadcastReceiver(Enabled = true, Exported = true)] [IntentFilter(new[] { "notpackagename.com.IntentReceiver.MySampleBroadcastReceiver" })] public class MySampleBroadcastReceiver : Broadcast
[BroadcastReceiver(Enabled = true, Exported = true)]
[IntentFilter(new[] { "notpackagename.com.IntentReceiver.MySampleBroadcastReceiver" })]
public class MySampleBroadcastReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
String value = intent.GetStringExtra("key");
Console.WriteLine(value);
}
}
var intent = new Intent("notpackagename.com.IntentReceiver.MySampleBroadcastReceiver");
intent.PutExtra("key", "MySampleBroadcastReceiver");
SendBroadcast(intent);
我想知道什么是显式广播还是隐式广播?
因为我需要应用程序在未运行时接收消息,如下所示:
清单注册接收人和
上下文注册的接收者是上下文注册的接收者
仅在应用程序运行时响应广播,而
清单注册的接收者可以响应广播,即使
应用程序可能未运行
Android识别出两种类型的广播:
显式广播–这些类型的广播针对特定的
应用显式广播最常见的用途是启动
活动。应用程序需要播放时的显式广播示例
拨一个电话号码;它将发送一个以手机为目标的意图
Android上的应用程序,并传递要拨打的电话号码。安卓
然后将意向发送到手机应用程序
隐式广播–这些广播被发送到网络上的所有应用程序
这个装置。隐式广播的一个示例是
动作\电源\连接意图。每次都会发布此意图
Android检测到设备上的电池正在充电。安卓
将此意图路由到已为此注册的所有应用
事件
更新
如果我错了,请纠正我:
根据下面的描述,MySampleBroadcastReceiver
上面是清单注册的接收者,所以它应该能够接收消息。但它甚至不起作用。我必须把它改成动态注册
意图过滤器用于注册广播接收器,以便
Android可以正确地路由消息。意图过滤器可以是
在运行时指定(有时称为
上下文注册接收器或作为动态注册)或
在Android清单(已注册的清单)中静态定义
接收器)
什么是显式广播还是隐式广播? 显式广播 发送的意图是显示意图的广播。通过指定意图组件的名称,通常用于知道目标组件的名称,以调用以下方法。意图是明确的,指定要激活的组件,这些组件通常在同一应用程序中实现
Intent.setComponent()
Intent.setClassName()
Intent.setClass()
new Intent(A.this,B.class)
隐式广播
它由Intent Filter实现,通常使用Intent Filter时不显式指示目标组件的名称。Android系统将根据隐式意图中设置的动作、类别、数据(URI和数据类型)找到最合适的组件来处理此意图。通常在不同的应用程序之间使用
您的代码是显式广播的
我需要应用程序在未运行时接收消息
根据我的研究,它不能在显式广播中实现,如果应用程序关闭,显式广播将关闭
如果您想实现应用程序接收来自服务器的消息,并且它不会被Android系统关闭,我建议您在前台启动该服务,就像下面的链接一样。