Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我的启动接收广播接收器在启动时未启动_Android_Xamarin_Xamarin.android_Broadcastreceiver - Fatal编程技术网

Android 我的启动接收广播接收器在启动时未启动

Android 我的启动接收广播接收器在启动时未启动,android,xamarin,xamarin.android,broadcastreceiver,Android,Xamarin,Xamarin.android,Broadcastreceiver,我用Xamarin.Android编写了一个广播接收器,非常完美,但我不知道为什么在设备启动时它不会被调用,有人能告诉我我的代码有什么问题吗 [BroadcastReceiver(Enabled = true, Exported = true)] [IntentFilter(new[] { Intent.ActionBootCompleted })] public class BootReceiver : BroadcastReceiver { public override void

我用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();
        }
    }
}
我编写了如上所示的广播接收器,但它无法在启动时启动。

s

许可

接受者

这些是参考链接


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

您还必须配置手机正在运行的任何电池优化服务。您必须禁用此应用程序的电池优化,否则它将无法接收任何广播

安装应用程序后,您必须至少从图标打开它一次,否则它将由Android系统进行任何广播

示例代码:


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

您在logcat中是否遇到一些错误?我没有收到错误消息,
<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>
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);
            }   

        }
    }
}