Насчет момента поднятия трубки на удаленном конце.
Покури на тему android.intent.action.NEW_OUTGOING_CALL
Там нужно будет добавить право <uses-permission android:name="android.permission.PROCESS_OUTGOING_ CALLS" />
и зарегать BroadCastReceiver на какойнибудь класс, который будет наследован от интерфейса слушателя,
<receiver android:name=".listener.OutCallLogger">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
и в нем обработать событие:
public class OutCallLogger extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
// что-то делаем, так же можем зарегать как и раньше, что бы получать,
// когда телефонный менеджер переходит в состояние IDLE, чтобы узнать,
//что трубку положили
}
}