Q:

Android: Automatic update of my app

I am beginner android developer.I wrote some simple app,witch adding to the calendar informations about calls.Now i want to add automatic update,if somebody call me,it automaticly update calendar.
Source code:
 DateFormat date = new SimpleDateFormat("dd/MM/yyyy hh:mm");
        String[] projection = new String[] { "_id", "name" };
        ContentValues event = new ContentValues();
        long currentTime = System.currentTimeMillis();

        Cursor callCur = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, null, null, null, android.provider.CallLog.Calls.DATE + " DESC");
        Uri calendarsUri = Uri.parse("content://com.android.calendar/calendars");
        Cursor managedCursor = managedQuery(calendarsUri, projection, "selected=1", null, null);

        int typeOfCall = 0;
        String callCachedName = null;
        String callName = null;
        int duration = 0;
        String compareNumbers = null;

        while(callCur.moveToNext()){

        compareNumbers = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));

        int callDateIn = callCur.getColumnIndexOrThrow(android.provider.CallLog.Calls.DATE);
        long callDateLong = new Long(callCur.getLong(callDateIn));

        event.put("calendar_id", 2);

        typeOfCall = callCur.getInt(callCur.getColumnIndex(android.provider.CallLog.Calls.TYPE));
        Log.d(TAG, "Type of Call: " + typeOfCall);

        if (typeOfCall == 1){
            duration = callCur.getInt(callCur.getColumnIndex(android.provider.CallLog.Calls.DURATION));
            Log.d(TAG, "Duration: " + duration);

            if (duration == 0){
                event.put("description", "Number wasn't avaibled"); 
                }
            else{
                event.put("description", "Duration of call was: " + duration);  
            }
            if (compareNumbers == null){
                callName = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                Log.d(TAG, "callName: " + callName);
                event.put("title", "Called to: " + callName);
            }
            else {
                callCachedName = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));
                Log.d(TAG, "cachedName: " + callCachedName);
                event.put("title", "Called to: " + callCachedName);
            }

        }
        if (typeOfCall == 2){
            duration = callCur.getInt(callCur.getColumnIndex(android.provider.CallLog.Calls.DURATION));
            Log.d(TAG, "Duration: " + duration);
            if (duration == 0){
                event.put("description", "Call was interupted");    
                }
            else{
                event.put("description", "Duration of call was: " + duration);  
            }
            if (compareNumbers == null){
                callName = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                Log.d(TAG, "callName: " + callName);
                event.put("title", "Call from : " + callName);
            }
            else {
                callCachedName = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));
                Log.d(TAG, "cachedName: " + callCachedName);
                event.put("title", "Call from : " + callCachedName);
            }

        }
        if (typeOfCall == 3){
             if (compareNumbers == null){
                callName = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                Log.d(TAG, "callName: " + callName);
                event.put("title", "Called to: " + callName);
             }
             else {
                callCachedName = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));
                Log.d(TAG, "cachedName: " + callCachedName);
                event.put("title", "Called to: " + callCachedName);
             }
             if (compareNumbers == null){
                callName = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                Log.d(TAG, "callName: " + callName);
                event.put("title", "Call from : " + callName);
             }
             else {
                callCachedName = callCur.getString(callCur.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));
                Log.d(TAG, "cachedName: " + callCachedName);
                event.put("title", "Call from : " + callCachedName);
             }

        }

        //event.put("eventLocation", "New Yorks");
        event.put("dtstart", callDateLong );

       Uri eventsUri = Uri.parse("content://com.android.calendar/events");
       Uri calUri = getContentResolver().insert(eventsUri, event);

        }
    }
}

A:

Extend BroadcastReceiver and add an entry in your AndroidManifest.xml with an intent-filter of ACTION_ANSWER.  You can then call your calender update method from the onReceive method of your myBroadcastReceiver class.

