My answer will not solve the whole your problem, but I figured out how to detect the fact that call was answered on the watch (and it works in my case).
I detect it by presence/absence of the com.google.android.clockwork.home.incomingcall.PhoneActivity
standard activity.
The code:
void waitForAnswer() {
sleep(1000, 0); // give a chance to the standard ringing activity
while (!isPhoneAnswered())
Thread.sleep(1000, 0);
// Here the call is anwered but you can not tell is it answered on the phone or on the watch or simple missed
}
private boolean isPhoneAnswered() {
boolean result = true;
try {
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<ActivityManager.RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (int i = 0; i < recentTasks.size(); i++) {
if (recentTasks.get(i).topActivity.getClassName().contains("com.google.android.clockwork.home.incomingcall.PhoneActivity")) {
result = false;
break;
}
}
} catch (Exception ex) {
Log.e(Constants.AppName, ex.getMessage());
}
return result;
}
Of course you should use it in a separate thread.
To detect is call incoming, outgoing or missed I use the code from this answer.
Hope this will help somebody.