“android.intent.action.MY_PACKAGE_REPLACED”广播接收器的实现在Xamarin

时间:2016-07-05 17:32:02

标签: push-notification google-cloud-messaging xamarin.android xamarin.forms

我们正在开发一个Xamarin.Forms应用程序。在Android方面,我正在尝试为“android.intent.action.MY_PACKAGE_REPLACED”意图实现广播接收器,因此我们可以确保在更新后向GCM注册。我在其中发出通知以确保代码被命中,但它没有出现。有什么建议?代码如下。我在Android 6.0上从VS部署到我的三星Galaxy s5。

[BroadcastReceiver(Permission = "com.google.android.c2dm.permission.SEND", Exported = true)]
    [IntentFilter(new string[] { Intent.ActionMyPackageReplaced }, DataPath = "<package name>", DataScheme = "package")]
    public class GCMUpdateReceiver : GcmReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            Bundle bundle = intent.Extras;
            var notificationBuilder = new Notification.Builder(Application.Context)
                .SetSmallIcon(Resource.Drawable.icon)
                .SetContentTitle("OnReceive")
                .SetContentText("ActionMyPackageReplaced")
                .SetAutoCancel(true);

            var notificationManager = (NotificationManager)Application.Context.GetSystemService(Context.NotificationService);
            notificationManager.Notify(0, notificationBuilder.Build());
        }

    }

值得注意的是:在推送以确保项目已构建并且应该被视为更新之前,我已经完成了清理工作。

1 个答案:

答案 0 :(得分:0)

我能够通过与我的其他广播接收器结合并寻找Intent.ActionPackageReplaced并检查以确保它是我的包被替换(而不是使用我从未收到过的ActionMyPackageReplaced)来解决这个问题。我的过滤器看起来像这样:

defaultbilling : true
defaultbilling : 'T'
defaultbilling : 'Yes'
defaultbilling : 1