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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不运行时接收消息,Xamarin Android上的显式广播和隐式广播相关的知识,希望对你有一定的参考价值。

我的代码在android 8.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);

我想知道什么被定义为显式广播或隐式广播?

因为我需要应用程序在未运行时接收消息,如下所示:

https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers

清单注册接收器和上下文注册接收器之间的主要区别在于,上下文注册的接收器将仅在应用程序运行时响应广播,而清单注册的接收器可以响应广播,即使应用程序可能不是运行。

https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers

Android识别两种类型的广播:

显式广播 - 这些类型的广播以特定应用为目标。显式广播的最常见用途是启动活动。应用程序需要拨打电话号码时显式广播的示例;它将发送一个针对Android手机应用程序的Intent并传递要拨打的电话号码。 Android然后将意图路由到手机应用程序。

隐式广播 - 这些广播将分发到设备上的所有应用程序。隐式广播的一个示例是ACTION_POWER_CONNECTED意图。每次Android检测到设备上的电池正在充电时,都会发布此意图。 Android会将此意图发送给已注册此活动的所有应用。

更新

如果我错了,请纠正我:

根据下面的描述,上面的MySampleBroadcastReceiver是清单注册的接收器,因此它应该能够接收消息。但它甚至没有工作。我必须将其更改为动态注册。

意图过滤器用于注册广播接收器,以便Android可以正确地路由消息。意图过滤器可以在运行时指定(这有时称为上下文注册的接收器或动态注册),也可以在Android Manifest(清单注册的接收器)中静态定义。

https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers

答案

什么被定义为显式广播或隐式广播?

明确的广播

发送的Intent是显示Intent的广播。通过指定Intent组件的名称,它通常用于知道目标组件的名称,以调用以下方法。目的很明确,指定要激活哪个组件,这通常在同一个应用程序中实现。

Intent.setComponent()
Intent.setClassName()
Intent.setClass()
new Intent(A.this,B.class)

隐含广播

它由Intent Filter实现,通常在没有明确指示目标组件名称的情况下使用。 Android系统将通过根据隐式intent中设置的操作,类别,数据(URI和数据类型)查找最合适的组件来处理此意图。通常用于不同的应用程序

您的代码是显式广播

我需要应用程序在它未运行时接收消息

根据我的研究,它无法在显式广播中实现,如果应用程序已关闭,则显式广播将被关闭。

如果你想从服务器获得应用程序接收消息并且它不会被Android系统关闭,我建议你像这个链接一样在前台启动服务。 How to create service doing work at period time in Xamarin.Forms?

以上是关于不运行时接收消息,Xamarin Android上的显式广播和隐式广播的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin App在调试时运行但在发布时崩溃

xamarin.android 接收器出现 BOOT_COMPLETED 错误

Xamarin.Android FCM 通知在应用程序关闭/后台时不显示在 HUD 中

“重新启动接收器”无法正常工作 android [Xamarin.Android]

广播接收器不在Xamarin Forms中工作

无法构建xamarin android项目