Передать дополнительные данные в C2DMReceiver во время процесса регистрации C2DM?

1

Я настраиваю C2DM на существующее клиентское/серверное приложение Android. Приложение уже имеет установленный набор классов для связи с сервером, входа пользователя в систему и поддержки токена аутентификации для использования с сервером.

Следуя документации, я добавил код для регистрации на C2DM и создал BroadcastReceiver для получения ответов. В моем BroadcastReceiver я получаю вызов метода onReceive(), который содержит идентификатор регистрации. Я могу увидеть его в отладчике и зарегистрировать его на консоли.

Проблема в том, что мне теперь нужно отправить ID на мой сервер, но я не могу, потому что у меня нет доступа к остальной части моего приложения. BroadcastReceiver - это не намерение или контекст, или что-то еще, что я знаю. Я мог бы обойти это, если бы у меня был только токен аутентификации пользователя, но я тоже не могу этого сделать. Я попытался передать его в качестве дополнительного для намерения регистрации, но он потерялся на этом пути.

Каков правильный способ получения дополнительных компонентов или контекста приложения в методе onReceive()?

Спасибо, Франк

Теги:
android-c2dm

1 ответ

1

Есть несколько хороших ресурсов, на которые это взято:

@Override
public void onReceive(Context context, Intent intent)
{
    String action = intent.getAction();
    Log.d(TAG, "Got a reply from Google");
    if (action.equals(REGISTER_ACTION))
    {
        handleRegistration(context, intent);
    }
    else if (action.equals(RECEIVE_ACTION))
    {
        handleMessage(context, intent);         
    }
    else
    {
        Log.w(TAG, "Unexpected intent: " + intent);
    }
}


private void handleRegistration(Context context, Intent intent)
{
    String registrationId = intent.getStringExtra("registration_id");
    String error = intent.getStringExtra("error");
    String unregistered = intent.getStringExtra("unregistered");
    if (error != null)
    {
        Log.e(TAG, "Registration failed: " + error);
        this.getApp(context).disablePush();
    }
    else if (unregistered != null)
    {            
        Log.d(TAG, "Unregistered: " + unregistered);            
        context.startService(new Intent(RegistrationService.COMPLETE_UNREGISTER_ACTION));
    }
    else if (registrationId != null)
    {            
        Log.d(TAG, "Registered with registration ID [" + registrationId + "]");            
        // Send registrationId to the Application Server in a separate thread.
        Intent i = new Intent(RegistrationService.COMPLETE_REGISTER_ACTION);            
        i.putExtra("regId", registrationId);
        context.startService(i);
    }
    else
    {            
        Log.d(TAG, "Other registration response: " + intent.getExtras());            
    }
}

Подробнее читайте в разделе Marakana

  • 0
    Что такое RegistrationService.COMPLETE_REGISTER_ACTION?
  • 0
    Что такое "услуга"? Все, что я хочу сделать здесь, - это вызвать метод для отправки регистрационной строки на мой сервер. Я не хочу писать совершенно новый сложный класс.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню