c# - 为 AlarmManager 设置 Intent

标签 c# android xamarin android-intent alarmmanager

根据我看到的所有引用资料,为了能够创建警报管理器实现,您必须使用一个 Intent 和一个未决 Intent ,但是我得到了这些错误,我不确定为什么因为我的代码几乎与他人相同。

有 2 个错误。这是包含 Intent 和 PendingIntent 两个错误的代码:

using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Android.Content;
using Android.App;

namespace Assignment {
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ChooseAlarm : ContentPage {
    public ChooseAlarm() {
        InitializeComponent();
        var donebutton = this.FindByName<Button>("doneButton");

        donebutton.Clicked += donebutton_Clicked;
    }

    private void donebutton_Clicked(object sender, EventArgs e) {
        StartAlarm();
    }
    private void StartAlarm() {
        AlarmManager manager = (AlarmManager)Forms.Context.GetSystemService(Context.AlarmService);

        Intent myIntent = new Intent(this, typeof(AlarmNotificationReceiver)); --Argument 2: cannot convert from 'System.Type' to 'Java.Lang.Class'

        PendingIntent  pendingIntent = PendingIntent.GetBroadcast(this, 0, myIntent, 0); --Argument 1: cannot convert from 'Assignment.ChooseAlarm' to 'Android.Content.Context', same for above

        manager.Set(AlarmType.RtcWakeup, Android.OS.SystemClock.ElapsedRealtime() + 4000, pendingIntent);
    }
}
}

接收方代码,无错误:

using Assignment.Droid;
using Android.OS;
using Xamarin.Android;
using Android.Content;
using Android.Support.V4.App;
using Android.App;

namespace Assignment {
[BroadcastReceiver(Enabled = true)]
public class AlarmNotificationReceiver : BroadcastReceiver {
    public override void OnReceive(Context context, Intent intent) {
        NotificationCompat.Builder builder = new 
NotificationCompat.Builder(context);

        builder.SetAutoCancel(true)
            .SetDefaults((int)NotificationDefaults.All)
            .SetSmallIcon(Resource.Drawable.Icon)
            .SetContentTitle("Alarm Actived!")
            .SetContentText("test")
            .SetContentInfo("Info");

        NotificationManager manager = (NotificationManager)context.GetSystemService(Context.NotificationService);
        manager.Notify(1, builder.Build());
    }
}
}

最佳答案

这里应该有activity,它继承了Activity或者AppCompatActivity

Intent myIntent = new Intent(this, typeof(MainActivity)); 

& 这里你当前的类应该是 Activity 。比你的关键字 this 更有效。

PendingIntent  pendingIntent = PendingIntent.GetBroadcast(this, 0, myIntent, 0);

我意识到您在 Xamarin 表单共享项目中使用 Android 代码,这是行不通的。你需要在那里有 Xamarin.forms 代码。否则在 Android 项目中使用它。

关于c# - 为 AlarmManager 设置 Intent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52092857/

相关文章:

android - OnResume 相机重新初始化黑屏

c# - 如何按名称获取实体的子属性

c# - 将 Eval 保存为 bool 而不隐藏代码

c# - 在 WPF 应用程序中显示和筛选 XML 数据

c# - 嵌入 C# 桌面应用程序的最佳脚本语言是什么?

Android/SQLite - 反引号、单引号还是双引号?

android - Propper java-groovy 互操作性 : how?

java - fragment 转换 : shared elements

c# - Xamarin Forms 依赖服务定义问题

c# - Xamarin.android 项目,如何删除警告 : duplicate zip entry [classes. jar...]