2017-08-30 6 views
0

フォーム私はアンドロイドでバックグラウンドサービスを持っているとして実装されている:私のログインページにXamarinフォームでバックグラウンドサービスが

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 
    { 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     global::Xamarin.Forms.Forms.Init(this, bundle); 
     UserDialogs.Init(() => (Activity)Forms.Context); 
     LoadApplication(new App()); 

     StartService(new Intent(this, typeof(PeriodicService))); 
    } 
} 

:MainActivityクラスで

[Service] 
public class PeriodicService : Service 
{ 
    public override IBinder OnBind(Intent intent) 
    { 
     return null; 
    } 

    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) 
    { 
     base.OnStartCommand(intent, flags, startId); 

     // From shared code or in your PCL] 
     Task.Run(() => { 
      MessagingCenter.Send<string>(this.Class.Name, "SendNoti"); 
     }); 

     return StartCommandResult.Sticky; 
    } 

} 

public LoginPage() 
    { 
     InitializeComponent(); 

     int i = 0; 
     MessagingCenter.Subscribe<string>(this, "SendNoti", (e) => 
     { 
      Device.BeginInvokeOnMainThread(() => 
      { 
       i++; 

       CrossLocalNotifications.Current.Show("Some Text", "This is notification!");       

       } 
      }); 
     }); 

    } 

ここでの主な問題は、私の定期的なサービスが初めて以外のメッセージを送信していないことです。通知は一度だけ表示されます。助けてください。

+1

あなたをあなたのサービスで 'MessagingCenter.Send' ** once **を呼び出すだけです... – SushiHangover

+0

@SushiHangoverあなたの答えをありがとう。だから、どのようにn時間ごとにその通知を送ることができますか? – Subash

+1

AlarmManager/SetRepeatingによる繰り返しアラームを使用すると、再発事象のスケジュールを立てることができます。https://stackoverflow.com/a/45657600/4984832 – SushiHangover

答えて

2

あなたの通知を送信するようにIntentServiceを作成します。

[Service(Label = "NotificationIntentService")] 
public class NotificationIntentService : IntentService 
{ 
    protected override void OnHandleIntent(Intent intent) 
    { 
     var notification = new Notification.Builder(this) 
          .SetSmallIcon(Android.Resource.Drawable.IcDialogInfo) 
          .SetContentTitle("StackOverflow") 
          .SetContentText("Some text.......") 
          .Build(); 
     ((NotificationManager)GetSystemService(NotificationService)).Notify((new Random()).Next(), notification); 
    } 
} 

次にセットアップにあなたのIntentServiceを「呼び出す」ことを保留意図使って繰り返しアラームAlarmManagerを使用します。

using (var manager = (Android.App.AlarmManager)GetSystemService(AlarmService)) 
{ 
    // Send a Notification in ~60 seconds and then every ~90 seconds after that.... 
    var alarmIntent = new Intent(this, typeof(NotificationIntentService)); 
    var pendingIntent = PendingIntent.GetService(this, 0, alarmIntent, PendingIntentFlags.CancelCurrent); 
    manager.SetInexactRepeating(AlarmType.RtcWakeup, 1000 * 60, 1000 * 90, pendingIntent); 
} 
+0

これはうまくいくと思いますが、少し助けてください。毎日午前10時、午後2時および午後5時に通知を設定するにはどうすればよいですか?また、その時点でデバイスがオフになっていた場合は、後で通知する必要があります。 – Subash

+0

ありがとう、私はこれを答えとしてマークし、私の質問にも解決策を見つけました:) – Subash

関連する問題