간단히 설명을 드리자면
A : Application(inner class에 BroadcastReceiver를 상속받은 D class 생성)
B : Service (C를 객체로 선언해서 사용)
C : 일반 클래스

이렇게 구성이 되어 잇는 환경인데요, 맨처음에 프로그램이 시작할 때, A가 시작되고 B(Service)를 시작시킵니다.

그후에 B내부에서 C로 접근해서 C내부에 있는 함수에서 Intent를 날려 A가 데이터를 받도록 구현을 하였습니다.

질문이 크게 두가지 인데요,
 - 첫번째 질문: A와 B사이에 데이터 주고 받는건 Aidl로 이용하면 되는데 A와 C간의 데이터를 주고 받는 문제 때문에 고민하다가
                          BroadcastReceiver를 사용하게 되었습니다. 이 방법이 옳은것인지요??? 
                          아니라면 해결책을 제시해 주시면 감사하겠습니다.
- 두번째 질문: 리시버로 데이터를 C에서 A로 보내면 오류가 나네요.. 전에 테스트 할때는 잘됐었는데 말이에요ㅠ
                        이상하게 실행을 하면 "응용 프로그램이 중단됩니다" 라고 뜨고 밑에서는 잘 수행이 되고 있어요.
                         그리고 다시 프로그램 열어서 시키면 잘되구요..(아참 저는 에뮬레이터로 하고있습니다.)

A 파일의  OnCreate부분입니다.
 
public void onCreate(Bundle savedInstanceState) { 
....
try {
         if (receiver == null)
             receiver = new MyReceiverR(this);
         
          this.registerReceiver(receiver, new IntentFilter(Intent.EXTRA_TEXT));
  } catch (Exception e) {
   // TODO Auto-generated catch block
     Log.d(DEBUG_TAG, e.getMessage());
  }
....
} 


A내부에 있는 제가 만든 D class(Receiver)입니다.

public class MyReceiverR extends BroadcastReceiver{
     
     String value;
     Context mcontext;
     
     public MyReceiverR(Context context){
      mcontext = context; 
     }
         
     public void onReceive(Context context, Intent intent){
      if(intent.getAction().equals(Intent.EXTRA_TEXT)){
       int[] recv_data = new int[3];
       recv_data = intent.getIntArrayExtra("BTDataConversion");
       Point p = new Point(recv_data[1], recv_data[2]); 
       switch(recv_data[0])
       {
       //mouse move
       case 0:
        //MouseMove(p);
        Toast.makeText(context, "MyReceiverR  "+ "MouseMove x:"+ new Integer(recv_data[1]).toString() + " y:"+ new Integer(recv_data[2]).toString(), Toast.LENGTH_SHORT).show();
        Log.i("MyReceiver","MouseMove x:"+ new Integer(recv_data[1]).toString() + " y:"+ new Integer(recv_data[2]).toString());
        break;
        
       //mouse left down
       case 1:
        //LButtonDown(p);
        Toast.makeText(context, "MyReceiverR  "+ "LButtonDown x:"+ new Integer(recv_data[1]).toString() + " y:"+ new Integer(recv_data[2]).toString(), Toast.LENGTH_SHORT).show();
        Log.i("MyReceiver","LeftDown x:"+ new Integer(recv_data[1]).toString() + " y:"+ new Integer(recv_data[2]).toString());
        break;
        
       //mouse left up 
       case 2:
        //LButtonUp(p);
        Toast.makeText(context, "MyReceiverR  "+ "LButtonUp x:"+ new Integer(recv_data[1]).toString() + " y:"+ new Integer(recv_data[2]).toString(), Toast.LENGTH_SHORT).show();
        Log.i("MyReceiver","LeftUp x:"+ new Integer(recv_data[1]).toString() + " y:"+ new Integer(recv_data[2]).toString());
        break;
        
       default:
        Toast.makeText(context, "MyReceiverR  "+ "Error x:"+ new Integer(recv_data[1]).toString() + " y:"+ new Integer(recv_data[2]).toString(), Toast.LENGTH_SHORT).show();
        Log.i("MyReceiver","Error x:"+ new Integer(recv_data[1]).toString() + " y:"+ new Integer(recv_data[2]).toString());
             
       }      
       
      }
     }
    }

그리고 마지막으로 C class안에 있는 Intent날리는 부분입니다.
Intent intent = new Intent(Intent.EXTRA_TEXT);
        int[] arr = new int[3];
        arr[0] = 0;
        arr[1] = x;
        arr[2] = y;   
              
     intent.putExtra("BTDataConversion", arr);
           mcontext.sendBroadcast(intent); 

에러 내용은 이클립스에서 드래그를 할수 없네요??? 다른분들은 어떻게 올리시는지...... 한줄만 붙여 드릴께요
04-14 14:23:34.753: ERROR/AndroidRuntime(271): java.lang.RuntimeException: Unable to start receiver com.samsunsg.ReceiverTest.MyReceiverR: java.lang.NullPointerException: println needs a message

감사합니다.