【问题标题】:Setting Intent for AlarmManager为 AlarmManager 设置 Intent
【发布时间】:2018-08-30 08:52:14
【问题描述】:

根据我看到的所有参考资料,为了能够创建警报管理器实现,您必须使用意图和待定意图,但是我得到了这些错误,我不知道为什么,因为我的代码几乎与其他人相同。

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

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());
    }
}
}

【问题讨论】:

  • 我把它们放在“--”后面的代码中,应该会更明显
  • 根据我的经验,如果您只发布最相关的代码和问题描述,您将获得更好的答案并且更快。这是因为人们通常不会花时间在长帖子上。这在minimal reproducible example 中有更好的解释

标签: c# android xamarin android-intent alarmmanager


【解决方案1】:

这里应该有活动,继承ActivityAppCompatActivity

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

& 这里你当前的课程应该是活动。比你关键字this 工作。

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

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

【讨论】:

  • 感谢回复,那我需要调用MainActivity中的StartAlarm方法吗?错误消失了,但是当我尝试从 xamarin 表单类中调用它时,它会这样做:ibb.co/kwLQNp 为此,我需要从 android 的 MainActivity 发送意图?
  • 你不能称之为表单共享项目。仅在 mailActvitiy 中调用它,但您的活动已经开始。
  • 如何告诉 MainActivity 调用 StartAlarm,例如用户点击按钮?
  • 为此,您需要使用自定义渲染器或 DependencyService 进行一些研究。如果我找到任何方法,我会帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多