BOOT_COMPLETED 上的接收器未被触发

Receiver on BOOT_COMPLETED not fired

我正在尝试 运行 一些关于 BOOT_COMPLETED 意图的代码,但没有成功。这是我尝试过的:

我的收件人:

using Android.App;
using Android.Content;

using System;
using System.Collections.Generic;
using System.Linq;

using onesentiment.Helpers;
using Newtonsoft.Json;
using Plugin.LocalNotifications;
using Android.Widget;

namespace onesentiment
{
    [BroadcastReceiver(Name = "com.onesentiment.name.BootBroadcastReceiver", Enabled = true)]
    [IntentFilter(new[] { Intent.ActionBootCompleted })]
    public class BootUpReceiver : BroadcastReceiver
    {

        List<TaskReminder> CurrentTaskReminders = new List<TaskReminder>();

        public override void OnReceive(Context context, Intent intent)
        {
            Toast.MakeText(context, "OnReceive", ToastLength.Long).Show();
            if (intent.Action == Intent.ActionBootCompleted)
            {
                Toast.MakeText(context, "Intent.ActionBootCompleted", ToastLength.Long).Show();
                if (Settings.TaskReminderList != string.Empty)
                    CurrentTaskReminders = JsonConvert.DeserializeObject<List<TaskReminder>>(Settings.TaskReminderList);

                // Set up notification icon if necessary
                var resourceId = (int)typeof(Resource.Drawable).GetField("ic_launcher").GetValue(null);
                LocalNotificationsImplementation.NotificationIconId = resourceId;

                // Retrieve notifications and cancel/resend them.
                if (CurrentTaskReminders.Count() > 0)
                {
                    for (int i = 0; i < CurrentTaskReminders.Count(); i++)
                    {
                        CrossLocalNotifications.Current.Show(
                            context.Resources.GetString(Resource.String.SetReminders_ReminderTitle),
                            context.Resources.GetString(Resource.String.SetReminders_ReminderMessage), 
                            CurrentTaskReminders[i].CrossLocalNotificationID, 
                            CurrentTaskReminders[i].Date );
                    }
                }
            }
        }
    }
}

清单上我有:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.onesentiment.name" android:versionCode="6" android:versionName="1.0" android:installLocation="internalOnly">
    <uses-sdk android:minSdkVersion="16" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <application android:label="onesentiment" android:hardwareAccelerated="true" android:icon="@drawable/ic_launcher" android:theme="@style/MyTheme">
        <receiver android:name="com.onesentiment.name.BootBroadcastReceiver"  android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="com.onesentiment.name" />
            </intent-filter>
        </receiver>
        <meta-data android:name="android.max_aspect" android:value="2.1" />
    </application>
</manifest>

我正在从共享首选项中获取 Settings.TaskReminderList

我没有收到任何 Toast,CrossLocalNotifications 的通知也没有显示。如果我不重新启动 phone 它们就会工作。

编辑: 我收到以下错误:

Broadcasting: Intent { act=android.intent.action.BOOT_COMPLETED pkg=com.onesentiment.name}
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=9941, uid=2000
        at android.os.Parcel.readException(Parcel.java:1684)
        at android.os.Parcel.readException(Parcel.java:1637)
        at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3605)
        at com.android.commands.am.Am.sendBroadcast(Am.java:780)
        at com.android.commands.am.Am.onRun(Am.java:410)
        at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
        at com.android.commands.am.Am.main(Am.java:124)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)

对于启动完成权限,我刚刚将其包含在我的清单中。我没有关于此权限的任何其他代码,这是问题所在吗?

编辑2: 运行 在模拟器上执行命令 adb shell am broadcast -a android.intent.action.BOOT_COMPLETED com.onesentiment.name 之后,我得到了这个(并且模拟器没有重新启动):

D/AndroidRuntime( 2417):
D/AndroidRuntime( 2417): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
D/AndroidRuntime( 2417): CheckJNI is OFF
E/cutils-trace( 2417): Error opening trace file: No such file or directory (2)
E/memtrack( 2417): Couldn't load memtrack module (No such file or directory)
E/android.os.Debug( 2417): failed to load memtrack module: -2
D/AndroidRuntime( 2417): Calling main entry com.android.commands.am.Am
D/AndroidRuntime( 2417): Shutting down VM

我必须转到设置/应用程序/MyApp 并启用自动启动。所以这不是我的代码的问题。这是部分手机如小米红米手机存在的安全问题