CDr*_*sos 1 android broadcastreceiver xamarin.android xamarin
我试图在没有运气的情况下在 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 );
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在清单上我有:
<?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>
Run Code Online (Sandbox Code Playgroud)
我正在从 sharedpreferences获取Settings.TaskReminderList。
我没有收到任何 Toast,也没有显示来自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)
Run Code Online (Sandbox Code Playgroud)
对于 Boot Completed 权限,我只是将它包含在我的清单中。我没有关于此权限的任何附加代码,这是问题吗?
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |