135 lines
3.9 KiB
C#
135 lines
3.9 KiB
C#
using System;
|
|
using Android.App;
|
|
using Android.OS;
|
|
using Android.Content;
|
|
using Android.Util;
|
|
using Android.Widget;
|
|
using ZicMoove.Settings;
|
|
|
|
namespace ZicMoove.Droid
|
|
{
|
|
[Service]
|
|
public class MyGcmIntentService : IntentService
|
|
{
|
|
static PowerManager.WakeLock sWakeLock;
|
|
static object LOCK = new object();
|
|
|
|
public static void RunIntentInService(Context context, Intent intent)
|
|
{
|
|
lock (LOCK)
|
|
{
|
|
if (sWakeLock == null)
|
|
{
|
|
// This is called from BroadcastReceiver, there is no init.
|
|
var pm = PowerManager.FromContext(context);
|
|
sWakeLock = pm.NewWakeLock(
|
|
WakeLockFlags.Partial, "My WakeLock Tag");
|
|
}
|
|
}
|
|
|
|
sWakeLock.Acquire();
|
|
intent.SetClass(context, typeof(MyGcmIntentService));
|
|
context.StartService(intent);
|
|
}
|
|
|
|
static object locker = new object();
|
|
|
|
protected override void OnHandleIntent(Intent intent)
|
|
{
|
|
try
|
|
{
|
|
Log.Info ("MyIntentService", "Calling InstanceID.GetToken");
|
|
lock (locker)
|
|
{
|
|
string action = intent.Action;
|
|
if (action!=null)
|
|
if (action.Equals("com.google.android.c2dm.intent.REGISTRATION"))
|
|
{
|
|
HandleRegistration(intent);
|
|
}
|
|
else if (action.Equals("com.google.android.c2dm.intent.RECEIVE"))
|
|
{
|
|
HandleMessage(intent);
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
lock (LOCK)
|
|
{
|
|
//Sanity check for null as this is a public method
|
|
if (sWakeLock != null)
|
|
sWakeLock.Release();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void HandleMessage(Intent intent)
|
|
{
|
|
// get the notification type id:
|
|
string ntft = intent.GetStringExtra("type");
|
|
string msg = intent.GetStringExtra("Description");
|
|
var position = intent.GetSerializableExtra ("Location");
|
|
SendNotification (msg);
|
|
}
|
|
|
|
void SendNotification (string message)
|
|
{
|
|
/* Bundle valuesForActivity = new Bundle();
|
|
valuesForActivity.PutInt("count", count); */
|
|
|
|
var intent = new Intent (this, typeof(MainActivity));
|
|
intent.AddFlags (ActivityFlags.ClearTop);
|
|
var pendingIntent = PendingIntent.GetActivity (this, 0, intent, PendingIntentFlags.OneShot);
|
|
// Construct a back stack for cross-task navigation:
|
|
TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this);
|
|
stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(MainActivity)));
|
|
stackBuilder.AddNextIntent(intent);
|
|
|
|
// Create the PendingIntent with the back stack:
|
|
PendingIntent resultPendingIntent =
|
|
stackBuilder.GetPendingIntent(0, PendingIntentFlags.UpdateCurrent);
|
|
|
|
var notificationBuilder = new Notification.Builder(this)
|
|
.SetAutoCancel(true)
|
|
.SetSmallIcon (Resource.Drawable.icon)
|
|
.SetContentTitle ("GCM Message")
|
|
.SetContentText (message)
|
|
.SetContentIntent(resultPendingIntent) // Start 2nd activity when the intent is clicked.
|
|
;
|
|
|
|
var notificationManager = (NotificationManager) GetSystemService(Context.NotificationService);
|
|
notificationManager.Notify (0, notificationBuilder.Build());
|
|
}
|
|
|
|
private void HandleRegistration(Intent intent)
|
|
{
|
|
string registrationId = intent.GetStringExtra("registration_id");
|
|
string error = intent.GetStringExtra("error");
|
|
string unregistration = intent.GetStringExtra("unregistered");
|
|
}
|
|
|
|
void SubscribeGCM ()
|
|
{
|
|
Context context = this.ApplicationContext;
|
|
string senders = Constants.GoogleSenderId;
|
|
Intent intent = new Intent ("com.google.android.c2dm.intent.REGISTER");
|
|
intent.SetPackage ("com.google.android.gsf");
|
|
intent.PutExtra ("app", PendingIntent.GetBroadcast (context, 0, new Intent (), 0));
|
|
intent.PutExtra ("sender", senders);
|
|
context.StartService (intent);
|
|
}
|
|
|
|
void UnsubscribeGCM ()
|
|
{
|
|
Context context = this.ApplicationContext;
|
|
Intent intent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
|
|
intent.PutExtra("app", PendingIntent.GetBroadcast(context, 0, new Intent(), 0));
|
|
context.StartService (intent);
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|