получение нулевого идентификатора устройства при регистрации до gcm

GCMRegistrar.checkDevice(this); GCMRegistrar.unregister(this); GCMRegistrar.checkManifest(this); if (GCMRegistrar.isRegistered(this)) { GCMRegistrar.getRegistrationId(this)); } regId = GCMRegistrar.getRegistrationId(this); l.setText(regId); if (regId.equals("")) { GCMRegistrar.register(this, "187805647345"); GCMRegistrar.getRegistrationId(this)); l.setText(regId); } else { GCMRegistrar.getRegistrationId(this)); } Toast.makeText(RegisterHalf.this,""+regId,2000).show(); 

При запуске приложения я получаю device id = null но когда я запускаю второй раз, device id имеет значение.

Пожалуйста, скажите мне, почему это происходит.

вам нужно импортировать проект google play services из sdk в рабочую область и добавить его в качестве lib для вашего проекта. Затем выполните следующие шаги:

 1).//declare global private GoogleCloudMessaging _gcm; String _devideId; 2). then execute a new thread like this: private class GetDeviceID extends AsyncTask{ @Override protected void onPreExecute() { // progress bar super.onPreExecute(); } @Override protected String doInBackground(String... params) { if (_gcm == null) { _gcm = GoogleCloudMessaging.getInstance(CompanyRegistration.this); } try { _devideId= _gcm.register("your project number of 12 digit"); System.out.println("my id is\n" + _devideId+ _devideId.length()); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { //dismiss dialouge here } } 3). in _devideId String you get the device id. 4).modify your manifest file as           

// в теге приложения добавьте получателя

        

// трансляция classа приемника

  import android.app.Activity; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.media.RingtoneManager; import android.support.v4.app.NotificationCompat; import android.util.Log; import com.google.android.gms.gcm.GoogleCloudMessaging; public class GcmBroadcastReceiver extends BroadcastReceiver { static final String TAG = "GCMDemo"; public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; Context ctx; private SharedPreferences prefs; Boolean alert = true; @Override public void onReceive(Context context, Intent intent) { prefs = context.getSharedPreferences( GcmBroadcastReceiver.class.getSimpleName(), context.MODE_PRIVATE); // changes here GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); ctx = context; String messageType = gcm.getMessageType(intent); System.out.println("reciever is" + messageType); if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { sendNotification("Send error: " + intent.getExtras().toString()); } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED .equals(messageType)) { sendNotification("Deleted messages on server: " + intent.getExtras().toString()); } else { Log.i("aaaaaa", intent.getExtras().toString()); sendNotification(intent.getExtras().getString("message").toString()); } setResultCode(Activity.RESULT_OK); } private void sendNotification(String msg) { mNotificationManager = (NotificationManager) ctx .getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, new Intent(ctx, GcmBroadcastReceiver.class), 0); // changes here NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( ctx).setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Come Fetch Me Notification ") .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setContentText(msg); mBuilder.setContentIntent(contentIntent); mBuilder.setSound(RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); } } 

Попробуйте проверить идентификатор приложения в консоли Google и проверьте, активируете ли вы его на консоли.

Для получения дополнительной информации вы можете ознакомиться с этим руководством.

http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

Я успешно смог его реализовать.

  • android.os.NetworkOnMainThreadException. Нужно использовать асинхронную задачу?
  • Невозможно создать или отредактировать виртуальные устройства Android (AVD) от Eclipse, ADT 22.6
  • Удалить будильник из AlarmManager с помощью функции cancel () - Android
  • Как использовать TabLayout с панелью инструментов внутри CollapsingToolbarLayout?
  • React Native android build не удалось. Местоположение SDK не найдено
  • Попытка нарисовать кнопку: как установить цвет штриха и как «выровнять» gradleиент на дно, не зная высоты?
  • Как рисовать границу только на одной стороне линейного макета?
  • Android закрыть приложение на кнопку назад
  • Анимированная иконка для ActionItem
  • Прозрачная строка состояния, не работающая с windowTranslucentNavigation = "false"
  • Рисованное изображение на canvasе
  • Давайте будем гением компьютера.