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

时间:2019-04-27 14:26:12

标签: android android-intent xamarin.android broadcastreceiver android-broadcast

我下面的代码不适用于androind 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识别两种广播类型:

     

显式广播-这些类型的广播针对特定的   应用。显式广播的最常见用法是开始   一个活动。应用程序需要进行显式广播的示例   拨打电话号码;它将分派针对手机的Intent   Android上的应用程序,并传递要拨打的电话号码。安卓系统   然后会将意图路由到“电话”应用。

     

隐式广播–这些广播被分发到上的所有应用   装置。隐式广播的一个示例是   ACTION_POWER_CONNECTED意图。每次发布此意图   Android检测到设备上的电池正在充电。安卓系统   会将此意图路由到已为此目的注册的所有应用   事件。

更新

如果我错了,请纠正我:

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

  

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

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

1 个答案:

答案 0 :(得分:0)

什么是显式广播或隐式广播?

明确广播

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

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

隐性广播

由意图过滤器实现,该过滤器通常在未明确指示目标组件名称的情况下使用。 Android系统将根据隐式意图中设置的操作,类别,数据(URI和数据类型)找到最合适的组件,从而处理此意图。通常在不同的应用程序之间使用

您的代码是明确广播的

我需要该应用在未运行时接收消息

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

如果要实现应用程序从服务器接收消息并且Android系统不会关闭该消息,建议您像此链接一样在前台启动服务。 How to create service doing work at period time in Xamarin.Forms?