国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程實現google消息通知功能示例

2019-12-12 02:40:43
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程實現google消息通知功能。分享給大家供大家參考,具體如下:

1. 定義一個派生于WakefulBroadcastReceiver的類

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {  private static final String TAG = "GcmBroadcastReceiver";  @Override  public void onReceive(Context context, Intent intent) {    Log.v(TAG, "onReceive start");    ComponentName comp = new ComponentName(context.getPackageName(),        GcmIntentService.class.getName());    startWakefulService(context, (intent.setComponent(comp)));    setResultCode(Activity.RESULT_OK);    Log.v(TAG, "onReceive end");  }}

2. 用于處理broadcast消息的類

public class GcmIntentService extends IntentService {  private static final String TAG = "GcmIntentService";  public static final int NOTIFICATION_ID = 1;  private NotificationManager mNotificationManager;  NotificationCompat.Builder builder;  private Intent mIntent;  public GcmIntentService() {    super("GcmIntentService");    Log.v(TAG, "GcmIntentService start");    Log.v(TAG, "GcmIntentService end");  }  @Override  protected void onHandleIntent(Intent intent) {    Log.v(TAG, "onHandleIntent start");    Bundle extras = intent.getExtras();    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);    String messageType = gcm.getMessageType(intent);    if (!extras.isEmpty()) {      if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR          .equals(messageType)) {        sendNotification(extras.getString("from"), "Send error",            extras.toString(), "", null, null);      } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED          .equals(messageType)) {        sendNotification(extras.getString("from"),            "Deleted messages on server", extras.toString(), "",            null, null);      } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE          .equals(messageType)) {        Log.v(TAG, "BUNDLE SIZE = " + extras.size());        boolean sendreply = false;        String msgid = null;        for (String key : extras.keySet()) {          if ("gcm.notification.title".equals(key)              || "gcm.notification.body".equals(key)              || "gcm.notification.click_action".equals(key)              || "gcm.notification.orderNumber".equals(key)) {            Log.v(TAG,                "KEY=" + key + " DATA=" + extras.getString(key));          } else if ("gcm.notification.messageId".equals(key)) {            sendreply = true;            msgid = extras.getString(key);            Log.v(TAG, "KEY=" + key + " DATA=" + msgid);          } else {            Log.v(TAG, "KEY=" + key);          }        }        sendNotification(extras.getString("from"),            extras.getString("gcm.notification.title"),            extras.getString("gcm.notification.body"),            extras.getString("gcm.notification.click_action"),            extras.getString("gcm.notification.orderNumber"), msgid);        Log.i(TAG, "Received: " + extras.toString());        mIntent = intent;        if (sendreply) {          new SendReceivedReply().execute(msgid);        } else {          GcmBroadcastReceiver.completeWakefulIntent(intent);        }      }    } else {      GcmBroadcastReceiver.completeWakefulIntent(intent);    }    Log.v(TAG, "onHandleIntent end");  }  private void sendNotification(String from, String title, String msg,      String action, String ordernumber, String msgid) {    Log.v(TAG, "sendNotification start");    Log.v(TAG, "FROM=" + from + " TITLE=" + title + " MSG=" + msg        + " ACTION=" + action + " ORDERNUMBER=" + ordernumber);    mNotificationManager = (NotificationManager) this        .getSystemService(Context.NOTIFICATION_SERVICE);    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(        this).setSmallIcon(R.drawable.ic_launcher)        .setContentTitle(title)        .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))        .setContentText(msg)        .setSound(Settings.System.DEFAULT_NOTIFICATION_URI);    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,        new Intent(this, ActivitySplash.class), 0);    mBuilder.setContentIntent(contentIntent);    if (ordernumber == null) {      mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());    } else {      int n = ordernumber.charAt(0);      String s = String.format(Locale.ENGLISH, "%d%s", n,          ordernumber.substring(1));      n = Integer.valueOf(s);      Log.v(TAG, "NOTIF ID=" + n);      mNotificationManager.notify(n, mBuilder.build());    }    GregorianCalendar c = new GregorianCalendar();    UtilDb.msgAdd(c.getTimeInMillis(), title, msg, msgid);    Intent intent = new Intent(UtilConst.BROADCAST_MESSAGE);    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);    Log.v(TAG, "sendNotification end");  }  /*************************************************************/  /************************** ASYNCTASK ************************/  /*************************************************************/  private class SendReceivedReply extends AsyncTask<String, Void, Void> {    @Override    protected Void doInBackground(String... params) {      if (params[0] != null) {        ArrayList<NameValuePair> nvp = new ArrayList<NameValuePair>();        nvp.add(new BasicNameValuePair("MessageId", params[0]));        UtilApp.doHttpPost(getString(R.string.url_base)            + getString(R.string.url_msg_send_received), nvp, null);      }      return null;    }    @Override    protected void onPostExecute(Void result) {      GcmBroadcastReceiver.completeWakefulIntent(mIntent);    }  }}

服務器端(C#):

public class GoogleNotificationRequestObj{  public IList<string> registration_ids { get; set; }  public Dictionary<string, string> notification { get; set; }}private static ILog _log = LogManager.GetLogger(typeof(GoogleNotification));public static string CallGoogleAPI(string receiverList, string title, string message, string messageId = "-1"){  string result = "";  string applicationId = ConfigurationManager.AppSettings["GcmAuthKey"];  WebRequest wRequest;  wRequest = WebRequest.Create("https://gcm-http.googleapis.com/gcm/send");  wRequest.Method = "post";  wRequest.ContentType = " application/json;charset=UTF-8";  wRequest.Headers.Add(string.Format("Authorization: key={0}", applicationId));  string postData;  var obj = new GoogleNotificationRequestObj()  {    registration_ids = new List<string>() { receiverList },    notification = new Dictionary<string, string>    {      {"body", message},      {"title", title}    }  };  if (messageId != "-1")  {    obj.notification.Add("messageId", messageId);  }  postData = JsonConvert.SerializeObject(obj);  _log.Info(postData);  Byte[] bytes = Encoding.UTF8.GetBytes(postData);  wRequest.ContentLength = bytes.Length;  Stream stream = wRequest.GetRequestStream();  stream.Write(bytes, 0, bytes.Length);  stream.Close();  WebResponse wResponse = wRequest.GetResponse();  stream = wResponse.GetResponseStream();  StreamReader reader = new StreamReader(stream);  String response = reader.ReadToEnd();  HttpWebResponse httpResponse = (HttpWebResponse)wResponse;  string status = httpResponse.StatusCode.ToString();  reader.Close();  stream.Close();  wResponse.Close();  if (status != "OK")  {    result = string.Format("{0} {1}", httpResponse.StatusCode, httpResponse.StatusDescription);  }  return result;}

更多關于Android相關內容感興趣的讀者可查看本站專題:《Android編程之activity操作技巧總結》、《Android資源操作技巧匯總》、《Android文件操作技巧匯總》、《Android開發入門與進階教程》、《Android視圖View技巧總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 修武县| 洞头县| 定州市| 土默特左旗| 突泉县| 汉源县| 佳木斯市| 龙州县| 林州市| 班戈县| 潼南县| 莒南县| 神池县| 玉田县| 大英县| 黔东| 安龙县| 五河县| 铜鼓县| 酒泉市| 新宁县| 潜江市| 比如县| 奎屯市| 和静县| 临漳县| 阳西县| 金堂县| 阿图什市| 永清县| 长阳| 托克逊县| 乐山市| 万全县| 日喀则市| 柘城县| 始兴县| 青川县| 台江县| 托里县| 上思县|