워키토키 액션

01. 여보세요, 거기 누구 없소?

재간둥이 알버트 로봇을 사용하여 무전기를 만들어 보자.

스마트 폰의 마이크로 입력받은 음성을 알버트 로봇의 스피커로 출력하는 프로그램을 작성하시오.

Activity 클래스의 onDestroy() 메소드를 상속받아 새로 구현하자. 프로젝트에 스마트 로봇 라이브러리를 포함하는 것을 잊지 않기를 바란다.

 public class SampleActivity extends Activity
 {
     @Override
     public void onCreate(Bundle savedInstanceState)
     {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
     }

     @Override
     public void onDestroy()
     {
         super.onDestroy();
     }
 }

Action 클래스의 obtain(Context context, String actionId) 메소드를 통해 액션 객체를 얻을 수 있는데, WalkieTalkie 액션의 객체를 얻기 위해서는 actionId에 Action.WalkieTalkie.ID를 입력하면 된다.

 public class SampleActivity extends Activity
 {
     private Action mAction;

     @Override
     public void onCreate(Bundle savedInstanceState)
     {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);

         mAction = Action.obtain(this, Action.WalkieTalkie.ID); // 액션 객체를 얻는다.
         mAction.activate(); // 액션을 시작한다.
     }

     @Override
     public void onDestroy()
     {
         super.onDestroy();

         mAction.deactivate(); // 액션을 중지한다.
         mAction.dispose(); // 액션을 폐기한다.
     }
 }

onCreate(Bundle savedInstanceState) 메소드에서 액션을 얻어서 시작하고 onDestroy() 메소드에서 액션을 중지 및 폐기하였지만 어디에서 해도 상관은 없다. 액션을 미리 얻어 두고 필요한 시점에 시작하여도 되고, 버튼을 누르면 시작하여도 된다. 여기서는 간단하게 하기 위해 onDestroy() 메소드에서 액션을 폐기하였지만 onDestroy() 메소드가 항상 호출되는 것은 아니므로 애플리케이션에 따라 onBackPressed() 메소드 등에서 액션을 폐기할 수도 있다. 애플리케이션을 종료하기 전에 액션을 모두 폐기하여야 한다는 것만 잊지 않도록 하자.

액션은 로봇과 마찬가지로 디바이스로 구성되어 있으며, findDeviceById(int deviceId) 메소드를 사용하여 필요한 디바이스의 객체를 얻을 수 있다.

WalkieTalkie 액션에는 소리의 감도를 나타내는 디바이스로 EFFECTOR_SENSITIVITY가 있다. 0부터 100까지의 값을 가질 수 있는데, 값이 크면 스피커로 출력되는 소리가 크지만 하울링이 생길 수 있고, 값이 작으면 하울링은 잘 생기지 않지만 스피커로 출력되는 소리가 작다. 따라서 스마트 폰이 알버트 로봇과 멀리 떨어져 있으면 값을 크게 하는 것이 좋고 가까이 있으면 값을 작게 하는 것이 좋다.

 public class SampleActivity extends Activity
 {
     private Action mAction;
     private Device mSensitivityDevice;

     @Override
     public void onCreate(Bundle savedInstanceState)
     {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);

         mAction = Action.obtain(this, Action.WalkieTalkie.ID);
         mSensitivityDevice = mAction.findDeviceById(Action.WalkieTalkie.EFFECTOR_SENSITIVITY);
         mSensitivityDevice.write(30); // 감도 값을 쓴다.
         mAction.activate();
     }

     @Override
     public void onDestroy()
     {
         super.onDestroy();

         mAction.deactivate();
         mAction.dispose();
     }
 }

프로그램을 실행하고 스마트 폰의 마이크에 말을 하면 알버트 로봇의 스피커로 출력될 것이다.