未运行时接收消息,Xamarin Android上的显式广播和隐式广播

未运行时接收消息,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

我下面的代码不适用于Android8.0+,但适用于8.0之前的版本。 因此,它似乎被视为隐式广播

 [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系统关闭,我建议您在前台启动该服务,就像下面的链接一样。