【问题标题】:My boot received broadcast receiver does not get launched on boot我的启动接收到的广播接收器没有在启动时启动
【发布时间】:2019-02-15 09:13:47
【问题描述】:

我在 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


【解决方案1】:

您不必显式设置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 分钟。之后,它会显示一条 toast 消息,并在 Chrome 浏览器中打开一个网站。

【讨论】:

  • 告诉我如何开始上课?我试试这个。 var intent1 = new Intent(context, typeof(BootRestoreAlarm)); intent1.SetPackage("app.test.testapp"); context.StartService(intent); 但它不起作用。在 BootRestoreAlarm 类中,我工作宽度 Local BaseData 和 Local Notifaction。
【解决方案2】:

斯洛文

权限

<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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多