Code example for Context

Methods: getBroadcastgetSharedPreferencesgetSystemService

-1
     */ 
    public void onRegistered(Context context, String registrationId) throws IOException {
        // registrationId will also be saved 
    } 
 
    /** 
     * Called when the device has been unregistered. 
     */ 
    public void onUnregistered(Context context) {
    } 
 
     
    @Override 
    public final void onHandleIntent(Intent intent) {
        try { 
            Context context = getApplicationContext();
            if (intent.getAction().equals(REGISTRATION_CALLBACK_INTENT)) {
                handleRegistration(context, intent);
            } else if (intent.getAction().equals(C2DM_INTENT)) {
                onMessage(context, intent);
            } else if (intent.getAction().equals(C2DM_RETRY)) {
                C2DMessaging.register(context, senderId);
            } 
        } finally { 
            //  Release the power lock, so phone can get back to sleep. 
            // The lock is reference counted by default, so multiple  
            // messages are ok. 
             
            // If the onMessage() needs to spawn a thread or do something else, 
            // it should use it's own lock. 
            mWakeLock.release();
        } 
    } 
 
     
    /** 
     * Called from the broadcast receiver.  
     * Will process the received intent, call handleMessage(), registered(), etc. 
     * in background threads, with a wake lock, while keeping the service  
     * alive.  
     */ 
    static void runIntentInService(Context context, Intent intent) {
        if (mWakeLock == null) {
            // This is called from BroadcastReceiver, there is no init. 
            PowerManager pm = 
                (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
                    WAKELOCK_KEY);
        } 
        mWakeLock.acquire();
        
        // Use a naming convention, similar with how permissions and intents are  
        // used. Alternatives are introspection or an ugly use of statics.  
        String receiver = context.getPackageName() + ".C2DMReceiver";
        intent.setClassName(context, receiver);
         
        context.startService(intent);
 
    } 
     
     
    private void handleRegistration(final Context context, Intent intent) {
        final String registrationId = intent.getStringExtra(EXTRA_REGISTRATION_ID);
        String error = intent.getStringExtra(EXTRA_ERROR);
        String removed = intent.getStringExtra(EXTRA_UNREGISTERED);
 
        if (Log.isLoggable(TAG, Log.DEBUG)) {
            Log.d(TAG, "dmControl: registrationId = " + registrationId +
                ", error = " + error + ", removed = " + removed);
        } 
 
        if (removed != null) {
            // Remember we are unregistered 
            C2DMessaging.clearRegistrationId(context);
            onUnregistered(context);
            return; 
        } else if (error != null) {
            // we are not registered, can try again 
            C2DMessaging.clearRegistrationId(context);
            // Registration failed 
            Log.e(TAG, "Registration error " + error);
            onError(context, error);
            if ("SERVICE_NOT_AVAILABLE".equals(error)) {
                long backoffTimeMs = C2DMessaging.getBackoff(context);
                 
                Log.d(TAG, "Scheduling registration retry, backoff = " + backoffTimeMs);
                Intent retryIntent = new Intent(C2DM_RETRY);
                PendingIntent retryPIntent = PendingIntent.getBroadcast(context, 
                        0 /*requestCode*/, retryIntent, 0 /*flags*/);
                 
                AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                am.set(AlarmManager.ELAPSED_REALTIME,
                        backoffTimeMs, retryPIntent);
 
                // Next retry should wait longer. 
                backoffTimeMs *= 2;