Установка намерения для AlarmManager - PullRequest
0 голосов
/ 30 августа 2018

Чтобы иметь возможность создать реализацию диспетчера аварийных сигналов, вы должны использовать намерение и ожидающее намерение, согласно всем ссылкам, которые я видел, однако я получаю эти ошибки, и я не уверен, почему, потому что мой код почти идентичны другим.

Есть 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());
    }
}
}

1 Ответ

0 голосов
/ 30 августа 2018

Здесь у вас должна быть активность, которая наследует Activity или AppCompatActivity

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

и здесь ваш текущий класс должен быть активным. Чем вы ключевое слово this собираетесь на работу.

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

То, что я понимаю, что вы используете код Android в общем проекте форм Xamarin, который не будет работать. Вам нужен код Xamarin.forms. В противном случае используйте его в проекте Android.

...