Java tutorial
/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.igorklimov.tictactoe.wifi; import android.app.IntentService; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.support.v4.app.NotificationCompat; import android.widget.Toast; import com.example.igorklimov.tictactoe.MainActivity; import com.example.igorklimov.tictactoe.R; import com.google.android.gms.gcm.GoogleCloudMessaging; import java.util.logging.Level; import java.util.logging.Logger; public class GcmIntentService extends IntentService { private static final int NOTIFICATION_ID = 1; private static final String ACTION = "action"; private static final String NAME = "name"; private static final String REG_ID = "regId"; private static final String YOU_FIRST = "you first"; private static final String INVITE_TO_PLAY = "invite to play"; private static final String NEW_USER = "new user"; private static final String START_GAME = "start game"; public GcmIntentService() { super("GcmIntentService"); } @Override protected void onHandleIntent(Intent intent) { Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); // The getMessageType() intent parameter must be the intent you received // in your BroadcastReceiver. String messageType = gcm.getMessageType(intent); if (extras != null && !extras.isEmpty()) { // has effect of unparcelling Bundle // Since we're not using two way messaging, this is all we really to check for if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { Logger.getLogger("GCM_RECEIVED").log(Level.INFO, extras.toString()); String action = extras.getString(ACTION); String message = ""; if (action == null) { return; } if (action.equals(INVITE_TO_PLAY)) { message = getApplicationContext().getString(R.string.format_invite_to_play, extras.get(NAME)); } else if (action.equals(NEW_USER)) { message = getApplicationContext().getString(R.string.new_user, extras.get(NAME)); } else if (action.equals(START_GAME)) { message = getApplicationContext().getString(R.string.start_game); } showToast(message); // sendNotification(message); } } GcmBroadcastReceiver.completeWakefulIntent(intent); } protected void showToast(final String message) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); } }); } private void sendNotification(String message) { NotificationManager mNotificationManager = (NotificationManager) getSystemService( Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); // Notifications using both a large and a small icon (which yours should!) need the large // icon as a bitmap. So we need to create that here from the resource ID, and pass the // object along in our notification builder. Generally, you want to use the app icon as the // small icon, so that users understand what app is triggering this notification. Bitmap largeIcon = BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher).setLargeIcon(largeIcon).setContentTitle("GCM DEMO") .setStyle(new NotificationCompat.BigTextStyle().bigText(message)).setContentText(message) .setPriority(NotificationCompat.PRIORITY_MAX); mBuilder.setContentIntent(contentIntent); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); } }