Have you looked at the sample code within the Sony Add-on SDK, specifically the SampleControlExtension? That would be a good example to start with.
Regarding your questions:
Sending a string from your app to the extension - it depends what you want to do with that string. If you wanted to show it on the screen of the watch then look for the showBitmap() method in the sample code I mentioned above for an example.
Sending data from extension to your app - this is the same as how you would do it in a standard Android app. Basically in your extension you would broadcast the Intent, something like this:
Intent intentBuzz = new Intent();
intentBuzz.setAction(buzzIntent);
mContext.sendBroadcast(intentBuzz);
Then in your app Activity register a broadcast receiver:
buzzReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
buzzAction();
}
};
registerReceiver(buzzReceiver, new IntentFilter(buzzIntent));
Edit:
I realized that I may have misunderstood your original question. It sounds like you are just trying to register your extension with the host app so that it shows up on the watch, is that correct? Since the host app is a Sony application, there is no way to modify the code for it, so you can't send a string from the host app to your extension or vice versa. If you are talking about sending a string from your application running on the phone/tablet to your extension running on the watch itself, then my answer above is correct.
To answer the original question then, you do need to make a Service to register your extension in the host app so that it shows up on the watch. See the SampleExtensionService.java in the example code.
As far as receiving the broadcast to register from the host app, you will need to declare a BroadcastReceiver in your AndroidManifest.xml and then in the onReceive() method start your service. Again, best way to see this is to look at the ExtensionReceiver.java class in the sample.