Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
C# Xamarin AlarmManager Android_C#_Android_Xamarin_Xamarin.android - Fatal编程技术网

C# Xamarin AlarmManager Android

C# Xamarin AlarmManager Android,c#,android,xamarin,xamarin.android,C#,Android,Xamarin,Xamarin.android,我已经创建了一个快速的xamarin android项目。最后,我想学习下面的内容,并将其应用到android和ios之间共享的xamarin表单项目中。现在我只关注Android方面的事情 我一直在努力学习如何安排本地通知在将来某个时间出现。制作了一个快速的一次性应用程序,下面是我编写的AlarmReceiver类,以及下面的MainActivity.cs class AlarmReceiver : BroadcastReceiver { public override void On

我已经创建了一个快速的xamarin android项目。最后,我想学习下面的内容,并将其应用到android和ios之间共享的xamarin表单项目中。现在我只关注Android方面的事情

我一直在努力学习如何安排本地通知在将来某个时间出现。制作了一个快速的一次性应用程序,下面是我编写的AlarmReceiver类,以及下面的MainActivity.cs

class AlarmReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        var message = intent.GetStringExtra("message");
        var title = intent.GetStringExtra("title");

        var notIntent = new Intent(context, typeof(MainActivity));
        var contentIntent = PendingIntent.GetActivity(context, 0, notIntent, PendingIntentFlags.CancelCurrent);
        var manager = NotificationManager.FromContext(context);

        //Generate a notification with just short text and small icon
        var builder = new Notification.Builder(context)
                        .SetContentIntent(contentIntent)
                        .SetContentTitle(title)
                        .SetContentText(message)
                        .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis())
                        .SetAutoCancel(true);

        var notification = builder.Build();
        manager.Notify(0, notification);
    }
}

public class MainActivity : Activity
{
    // Unique ID for our notification: 
    private static readonly int ButtonClickNotificationId = 1000;

    // Number of times the button is tapped (starts with first tap):
    private int count = 1;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);

        // Display the "Hello World, Click Me!" button and register its event handler:
        Button button = FindViewById<Button>(Resource.Id.MyButton);
        button.Click += ButtonOnClick;
    }

    // Handler for button click events.
    private void ButtonOnClick(object sender, EventArgs eventArgs)
    {
        Intent alarmIntent = new Intent(Application.Context, typeof(AlarmReceiver));
        alarmIntent.PutExtra("message", "This is my test message!");
        alarmIntent.PutExtra("title", "This is my test title!");

        PendingIntent pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
        AlarmManager alarmManager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService);            
        alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 1 * 1000, pendingIntent);           
    }
}
class AlarmReceiver:BroadcastReceiver
{
公共覆盖void OnReceive(上下文、意图)
{
var message=intent.GetStringExtra(“消息”);
var title=intent.GetStringExtra(“title”);
var notIntent=新意图(上下文、类型(MainActivity));
var contentIntent=pendingent.GetActivity(上下文,0,notIntent,pendingentFlags.CancelCurrent);
var manager=NotificationManager.FromContext(上下文);
//仅使用短文本和小图标生成通知
var builder=new Notification.builder(上下文)
.SetContentIntent(contentIntent)
.SetContentTitle(标题)
.SetContentText(消息)
.SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis())
.SetAutoCancel(真);
var notification=builder.Build();
经理通知(0,通知);
}
}
公共课活动:活动
{
//我们通知的唯一ID:
私有静态只读int ButtonClickNotificationId=1000;
//点击按钮的次数(从第一次点击开始):
私有整数计数=1;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
//显示“Hello World,Click Me!”按钮并注册其事件处理程序:
Button Button=FindViewById(Resource.Id.MyButton);
按钮。单击+=按钮单击;
}
//按钮单击事件的处理程序。
私有void按钮nonclick(对象发送方,EventArgs EventArgs)
{
意向alarmIntent=新意向(Application.Context,typeof(AlarmReceiver));
alarmIntent.PutExtra(“消息”,“这是我的测试消息!”);
alarmIntent.PutExtra(“标题”,“这是我的测试标题!”);
PendingEvent PendingEvent=PendingEvent.GetBroadcast(Application.Context,0,alarmIntent,PendingEventFlags.UpdateCurrent);
AlarmManager AlarmManager=(AlarmManager)Application.Context.GetSystemService(Context.AlarmService);
alarmManager.Set(AlarmType.ElapsedRealtime,SystemClock.ElapsedRealtime()+1*1000,PendingEvent);
}
}
当我逐步完成并调试此过程时,似乎没有调用OnReceive方法

我一直在关注这篇文章,因为我很难研究如何通过谷歌搜索正确地做到这一点。在这里:


如果有人能分享一些智慧,我将不胜感激。

问题是您的
BroadcastReceiver
没有
[BroadcastReceiver
]属性

此代码适用于:

AlarmReceiver.cs

[BroadcastReceiver]
public class AlarmReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        var message = intent.GetStringExtra("message");
        var title = intent.GetStringExtra("title");

        var resultIntent = new Intent(context, typeof(MainActivity));
        resultIntent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);

        var pending = PendingIntent.GetActivity(context, 0,
            resultIntent,
            PendingIntentFlags.CancelCurrent);

        var builder =
            new Notification.Builder(context)
                .SetContentTitle(title)
                .SetContentText(message)
                .SetSmallIcon(Resource.Drawable.Icon)
                .SetDefaults(NotificationDefaults.All);

        builder.SetContentIntent(pending);

        var notification = builder.Build();

        var manager = NotificationManager.FromContext(context);
        manager.Notify(1337, notification);
    }
}
[Activity(Label = "App3", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.Main);

        var button = FindViewById<Button>(Resource.Id.MyButton);

        button.Click += delegate
        {
            var alarmIntent = new Intent(this, typeof(AlarmReceiver));
            alarmIntent.PutExtra("title", "Hello");
            alarmIntent.PutExtra("message", "World!");

            var pending = PendingIntent.GetBroadcast(this, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);

            var alarmManager = GetSystemService(AlarmService).JavaCast<AlarmManager>();
            alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 5*1000, pending);
        };
    }
}
MainActivity.cs

[BroadcastReceiver]
public class AlarmReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        var message = intent.GetStringExtra("message");
        var title = intent.GetStringExtra("title");

        var resultIntent = new Intent(context, typeof(MainActivity));
        resultIntent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);

        var pending = PendingIntent.GetActivity(context, 0,
            resultIntent,
            PendingIntentFlags.CancelCurrent);

        var builder =
            new Notification.Builder(context)
                .SetContentTitle(title)
                .SetContentText(message)
                .SetSmallIcon(Resource.Drawable.Icon)
                .SetDefaults(NotificationDefaults.All);

        builder.SetContentIntent(pending);

        var notification = builder.Build();

        var manager = NotificationManager.FromContext(context);
        manager.Notify(1337, notification);
    }
}
[Activity(Label = "App3", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        SetContentView(Resource.Layout.Main);

        var button = FindViewById<Button>(Resource.Id.MyButton);

        button.Click += delegate
        {
            var alarmIntent = new Intent(this, typeof(AlarmReceiver));
            alarmIntent.PutExtra("title", "Hello");
            alarmIntent.PutExtra("message", "World!");

            var pending = PendingIntent.GetBroadcast(this, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);

            var alarmManager = GetSystemService(AlarmService).JavaCast<AlarmManager>();
            alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 5*1000, pending);
        };
    }
}
[活动(Label=“App3”,MainLauncher=true,Icon=“@drawable/Icon”)]
公共课活动:活动
{
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
var button=findviewbyd(Resource.Id.MyButton);
按钮。单击+=委派
{
var alarmIntent=新意图(此,类型为(AlarmReceiver));
alarmIntent.PutExtra(“标题”、“您好”);
alarmIntent.PutExtra(“消息”,“世界!”);
var pending=PendingIntent.GetBroadcast(this,0,alarmIntent,PendingIntentFlags.UpdateCurrent);
var alarmManager=GetSystemService(AlarmService).JavaCast();
alarmManager.Set(AlarmType.ElapsedRealtime,SystemClock.ElapsedRealtime()+5*1000,待定);
};
}
}

好的,我们正在取得进展。是在添加[BroadcastReceiver]后,我看到调试器在OnReceive方法中遇到了断点。然而,通知本身仍然没有出现在我的测试中。我们现在已经走到一半了。如果不为它设置任何图标,它似乎就不会显示。让我更新我的答案。如何在特定的时间分钟内重复报警interval@sudharsanchandrasekaran创建一个描述您的问题的新问题。