2016-05-11 2 views
1

У меня есть сценарий, где say x назначает задачу y с назначенной датой и временем. Прямо сейчас я отправляю уведомление, когда задача назначена i.e при нажатии кнопки с датой & времени. Теперь я также хочу отправить уведомление о напоминании, если он не завершит указанное время. Ниже мой кодКак отправить уведомление gcm на определенную дату и время

Button dialogButtonOk = (Button) dialog.findViewById(R.id.dialogButtonOk); 
Button dialogButtonNo = (Button) dialog.findViewById(R.id.dialogButtonNo); 
dialogButtonOk.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick (View v){ 
    changeCallStatus(); 
    sendGcmNotification(); 
    dialog.dismiss(); 
} 
}); 
dialogButtonNo.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick (View v){ 
    dialog.dismiss(); 
} 
}); 
dialog.show(); 
} 
public void sendGcmNotification{ 
String status = "OnHold"; 
String url = URLMap.getSendNotificationUrl("sendnotification_url"); 
url = url.replace("{ename}", name).replace("{tid}", aTokenId).replace("{status}", status); 
    StringRequest request=new StringRequest(Request.Method.GET,url,new Response.Listener<String>(){ 
@Override 
public void onResponse(String response){ 
    Log.i("GCM-MESSAGE","has been sent successfully"); 
    } 
    },new Response.ErrorListener(){ 
    @Override 
    public void onErrorResponse(VolleyError error){ 
    Log.i("GCM-MESSAGE","Failed to send the message : ComplaintDetailsSupervisor.java"); 
    } 
    }); 
    request.setRetryPolicy(new VolleyRetryPolicy().getRetryPolicy()); 
    RequestQueue queue=((VolleyRequestQueue)getApplication()).getRequestQueue(); 
    queue.add(request); 
     } 
    } 

стороне сервера код

namespace CMS.Notification 
    { 
    public class GCMNotification 
    { 
    private CMSEntities db = new CMSEntities(); 
    static string gcmid = "AIzaSyCDJbRbAl-mjG2am5R3gAaXmXXXXXXXXX"; 
    static string msg=""; 
    public string AssignEmpNotification(string employeeName, string TokenId,string status) 
     { 
     if (status.Trim() == "Open") 
      msg = "value1" + employeeName;    
     else if (status.Trim() == "OnHold") 
      msg = "value5" + employeeName; 
     else 
      msg = "value9" + employeeName; 

     WebRequest tRequest; 
     tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send"); 
     tRequest.Method = "post"; 
     tRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; 
     tRequest.Headers.Add(string.Format("Authorization: key={0}", GoogleAppID)); 
     String collaspeKey = Guid.NewGuid().ToString("n"); 
     String postData = string.Format("registration_id={0}&data.msg={1}&collapse_key={2}", TokenId, msg, collaspeKey); 
     Byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     tRequest.ContentLength = byteArray.Length; 
     Stream dataStream = tRequest.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 
     WebResponse tResponse = tRequest.GetResponse(); 
     dataStream = tResponse.GetResponseStream(); 
     StreamReader tReader = new StreamReader(dataStream); 
     String sResponseFromServer = tReader.ReadToEnd(); 
     tReader.Close(); 
     dataStream.Close(); 
     tResponse.Close(); 
     return sResponseFromServer; 
    }   
} 

Мой класс Receiver

public class NotificationService extends GcmListenerService { 
String msg; 
int time; 
public static final String appname = "FM Ninja"; 
Intent myintent; 
public NotificationService() { 
    // super("GcmIntentService"); 
} 
public static int MESSAGE_NOTIFICATION_ID = 435345; 
private static final String TAG = "MyGcmListenerService"; 
@Override 
public void onMessageReceived(String from, Bundle data) { 
    String message = data.getString("message"); 
    Log.d(TAG, "From: " + appname); 
    Log.d(TAG, "Message: " + message); 
    String msg1 = data.getString("msg"); 
    String name = "six30labs.io"; 
    sendNotification(name, msg1); 
} 

private void sendNotification(String title, String body) { 
    Context context = getBaseContext(); 
    if(body.contains("value1")){     
     msg=body.replace("value1","New complaint has been Raised by \n"); 
     msg = msg + ". Tap to view!!"; 
     myintent=new Intent(this, HomeActivity.class); 
     myintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     myintent.setAction("item1"); 
    }    
    else if(body.contains("value5")) { 
     msg = body.replace("value5", "Your task has been put On Hold by\n"); 
     msg = msg + ". Tap to view!!"; 
     myintent=new Intent(this, HomeActivity.class); 
     myintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     myintent.setAction("item5"); 
    } 
    else{ 
     msg=body.replace("value9","Your task is due..Please contact your supervisor to change status..Thanks \n"); 
     msg = msg + ".\n Tap to view!!"; 
     myintent=new Intent(this, HomeActivity.class); 
     myintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     myintent.setAction("item9"); 
    } 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)    .setContentTitle(title).setSmallIcon(R.drawable.fmn24).setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) 
      .setContentText(msg).      setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)).setVibrate(new long[]{1000,1000,1000,1000}).      setAutoCancel(true).setColor(getResources().getColor(R.color.colorPrimary)); 
    time=(int)System.currentTimeMillis(); 
    PendingIntent intent = PendingIntent.getActivity(context, time, 
      myintent, 0); 
    mBuilder.setContentIntent(intent); 
    NotificationManager mNotificationManager = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(MESSAGE_NOTIFICATION_ID,mBuilder.build()); 
    MESSAGE_NOTIFICATION_ID++; 
} 
} 

Пожалуйста, предложите мне о том, как отправить уведомление напоминание .. Я хочу назвать это метод sendGcmNotification еще раз, когда назначена дата и время. Пожалуйста, предложите мне, как написать службу, которая запускает метод sendGcmNotification, когда t он назначает дату и время. Спасибо

ответ

0

Я думаю, вы хотите отправить Push от клиента к клиенту?

Во-первых: вы можете реализовать Service, который будет запускать код сервера GCM и отправлять push на другую сторону (только если вы знаете токен устройства этого устройства). Чтобы обнаружить «дату выполнения», вы можете использовать Timer (но убедитесь, что Таймер восстанавливается/возобновляется, когда что-то пойдет не так)

Во-вторых: Напишите сервер, который будет следить за синхронизацией и отправкой push-уведомлений. Здесь ваш клиент должен сообщить серверу, когда создавалась задача, и когда это произойдет.