Я пытаюсь запустить какой-то код с намерением BOOT_COMPLETED, но безуспешно.вот что я пробовал:
myreciever:
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 из sharedpreferences.
Я не получаю никаких тостов, а уведомления от CrossLocalNotifications не отображаются.если я не перезагружаю телефон, они работают.
РЕДАКТИРОВАТЬ: я получаю следующую ошибку:
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)
Для разрешения «Загрузка завершена» я просто включил егона моем манифесте.У меня нет дополнительного кода об этом разрешении, это проблема?
EDIT2: после запуска команды 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