発話を行うロボアプリの開発をしながら、開発手順について説明していきたいと思います。Androidプロジェクトを作成し、ロボアプリの初期設定を行い、ActivityがPepperを操作するために必要な実装について見ていきます。
#1.プロジェクト作成
ロボアプリ開発にあたって、まず初めに標準的なAndroidプロジェクトを作成し、それにロボアプリの設定を追加します。Android StudioのFileメニューのNewからNew Projectを選択し、Androidプロジェクトを作成してください。プロジェクト作成時のTarget Android DeviceではPhone and TabletのAndroid 6.0 (Marshmallow)が選択してください。
#2.ロボアプリの初期設定
作成したAndroidプロジェクトにロボアプリの初期設定を行います。
<手順>
1.FileメニューのNewからRobot Applicationを選択します。
2.サポートするRobot SDKのバージョンと追加するモジュールを選び、OKをクリックしてください。
3.Sync Project with Gradle Fileボタン(下図の参照)をクリックし、プロジェクトとGradleファイルを同期させます。
結果
これでロボアプリの初期設定が完了しました。以下のファイルが更新されていることが確認できます。
-
assetsにrobotディレクトリとrobotsdk.xmlファイルが追加されます。robotsdk.xmlファイルには、選択したRobot SDKのバージョンが含まれています。
-
appのbuild.gradle fileのdependenciesにQiSKDのモジュールが追加されます。これにより、アプリからQiSDKが利用できるようになります。
-
AndroidManifest.xmlにuses-featureタグが追加されます。追加されたuses-featureタグはアプリがPepperを使用することを示しています。
#3.QiSDK実装とロボットのライフサイクル
ActivityからPepperを操作するために必要となる共通の実装について見ていきます。
<手順>
1.onCreateメソッドの中で、QiSDKにActivityを登録します。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
QiSDK.register(this, this);
}
2.onDestroyメソッドの中でActivityの登録を解除します。
protected void onDestroy() {
QiSDK.unregister(this, this);
super.onDestroy();
}
※ QiSDK.unregister(this)を使用した場合は、ActivityのすべてのRobotLifecycleCallbacksの登録が解除されます。登録したままにしておくべきコールバックを解除してしまうことのないよう注意してください。
3.作成したActivityにRobotActivityを継承させます。これにより、Activityは会話の内容を画面に表示するSpeechBarを利用できるようになります。
public class MainActivity extends RobotActivity
4.追加したActivityにRobotLifecycleCallbacksを実装してください。
public class MainActivity extends RobotActivity implements RobotLifecycleCallbacks
このインターフェースはロボットフォーカスの獲得と喪失の通知を受けるためのものです。
5.onRobotFocusGained、onRobotFocusLost、onRobotFocusRefusedメソッドをオーバーライドで実装します。
@Override
public void onRobotFocusGained(QiContext qiContext) {}
@Override
public void onRobotFocusLost() {}
@Override
public void onRobotFocusRefused(String reason) {}
onRobotFocusGainedはActivityがロボットフォーカスを獲得した時に呼ばれます。ロボットフォーカスを獲得した時、ActivityはPepperに様々な動きをさせることが出来ます。 onRobotFocusLostはActivityがロボットフォーカスを失った時に呼ばれます。ロボットフォーカスを失った時、ActivityはPepperを動かすことが出来なくなります。
重要
onRobotFocusGainedとonRobotFocusLostメソッドはバックグラウンドスレッドで実行されるため、UIスレッドをブロックすることはありません。