我的引导接收的广播接收器在引导时无法启动

问题描述 投票:1回答:2

[我在Xamarin.Android中编写了一个广播接收器,它看起来很完美,但是我不知道为什么在设备启动时没有调用它,有人可以告诉我我的代码有什么问题吗?

[BroadcastReceiver(Enabled = true, Exported = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class BootReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        if (intent.Action.Equals("android.intent.action.BOOT_COMPLETED"))
        {
            Toast.MakeText(context, "1 Received intent! You can run your background task here.", ToastLength.Short).Show();
        }
    }
}

我如上所述编写了广播接收器,但是在启动时无法启动。

android xamarin xamarin.android broadcastreceiver
2个回答
0
投票

您不必显式设置Exported = "true",因为您已经至少有一个意图过滤器,因此它是多余的。接收者也缺少您的许可,这是必需的。不要手动编辑您的AndroidManifest.xml,因为它会被Xamarin覆盖。

您还必须配置您的手机正在运行的任何电池优化服务,例如华为。您必须为此应用禁用电池优化,否则它将不会收到任何广播。

安装该应用程序后,您必须至少从图标中打开一次,否则它将被Android系统以任何广播的形式传送。

示例代码:

namespace AZ.Sample.Notifications
{
    using System;
    using Android;
    using Android.App;
    using Android.Content;

    [BroadcastReceiver(Enabled = true, Permission = Manifest.Permission.ReceiveBootCompleted)]
    [IntentFilter(new[] { Intent.ActionBootCompleted }, Priority = (int)IntentFilterPriority.LowPriority, Categories = new[] { Intent.CategoryDefault })]

    public class BootBroadcastReceiver : BroadcastReceiver
    {

        public override void OnReceive(Context context, Intent intent)
        {

            Toast.MakeText(Android.App.Application.Context, "Broadcast Received", ToastLength.Long).Show();

            var uri = Android.Net.Uri.Parse("http://www.google.com");
            var intent1 = new Intent(Intent.ActionView, uri);
            intent1.AddFlags(ActivityFlags.NewTask);

            intent1.SetPackage("com.android.chrome");
            try
            {
                context.StartActivity(intent1);
            }
            catch (ActivityNotFoundException ex)
            {
                ex.PrintStackTrace();
                //Chrome browser not installed
                intent.SetPackage(null);
                context.StartActivity(intent1);
            }   

        }
    }
}

Chrome应该安装在您将在其上运行此示例代码的移动设备上,重新启动设备后,请勿使其休眠并等待至少2分钟。之后,它将显示一条祝酒消息,并在Chrome浏览器中打开一个网站。


-2
投票

Sloution

Permission

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

接收器

 <receiver android:name=".BootCompletedReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>

这些是参考链接

xamarin.android Receiver on BOOT_COMPLETED errorBOOT_COMPLETED not working Android

© www.soinside.com 2019 - 2024. All rights reserved.