検索
連載

TwilioとRailsで作る、電話でテキスト読み上げアプリAndroidアプリちょい足し開発レシピ(2)(4/5 ページ)

AndroidアプリにさまざまなWebサービスやライブラリを「ちょい足し」することで魅力的なアプリに大変身させる方法を紹介する連載。クラウド電話APIサービスTwilioを使った「自動音声読み上げツール」の作り方を紹介。サーバサイドはRuby on Railsで作成します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

クライアントのAndroidアプリを実装する準備

 初めに、Androidアプリプロジェクトを新規作成しておきます。特別な設定は必要ありませんが、最小SDKバージョンをAndroid 2.2(APIレベル8)以上に指定しなければいけない点だけ注意してください。

 クライアントアプリを実装するには「Twilio Client SDK for Android」が必要です。以下のURLにアクセスし、ダウンロードしましょう。

 ダウンロードしたファイルを解凍すると、libsフォルダがあると思います。そのlibsフォルダの中のファイルをすべてコピーし、Androidアプリプロジェクトのlibsフォルダにペーストします。これでライブラリの導入は完了です。

Androidアプリの実装

 いよいよ、ここからはAndroidアプリの実装に入ります。

AndroidManifest.xmlの編集

 AndroidManifest.xmlに以下の権限を追加しましょう。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

 次に、applicationタグ内にTwilioClientServiceを追加します。これはTwilio Client SDKが内部的に使用しているサービスです。「exported="false"」にする必要がある点に注意してください。

<service
    android:name="com.twilio.client.TwilioClientService"
    android:exported="false" />

 以上でAndroidManifest.xmlの修正は終わりです。

Activityの実装

 Activityを以下のように実装してください。

package jp.classmethod.android.sample.hellotwilio;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.content.Loader;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import com.twilio.client.Device;
import com.twilio.client.Twilio;
public class HelloTwilioActivity extends FragmentActivity implements OnClickListener, Twilio.InitListener {
    private static final String TAG = HelloTwilioActivity.class.getSimpleName();
    private Device mDevice;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_twilio);
        // Connectボタン
        findViewById(R.id.button).setOnClickListener(this);
        // Twilioクライアントを初期化する
        Twilio.initialize(getApplicationContext(), this);
    }
    @Override
    public void onInitialized() {
        Log.d(TAG, "Twilioクライアントの初期化が完了しました");
    }
    @Override
    public void onError(Exception e) {
        Log.e(TAG, "エラーが発生しました:" + e.getLocalizedMessage());
    }
    @Override
    public void onClick(View v) {
    }
}

 まず最重要なのがonCreate()メソッド内の最後にあるTwilio.initialize()メソッドです。このメソッドはTwilio Client SDKの初期化処理を実行するメソッドのため、Twilio Client SDKを使用したい場合、必ず呼び出す必要があります。

 コンストラクタにはContextとTwilio.InitListenerの実装クラスを渡さなければいけないので、Activityに実装します。onInitialized()メソッドは初期化が正常に完了したときに呼び出されます。

 Activityに対応するレイアウトには読み上げたいメッセージを入力するEditTextと、発信するときに使うButtonを置きます。

 またメンバ変数にあるDeviceインスタンスはTwilioに登録したデバイスを操作するときに使います。各インスタンスは以下の実装で取得するので、今は変数宣言だけしておいてください。

「DeviceLoader」クラスの作成

 次に「DeviceLoader」というクラスを作ります。このクラスはケイパビリティトークンを取得し、Twilioサービスにデバイスを登録する処理を非同期で行うクラスになります。以下のように実装しましょう。

package jp.classmethod.android.sample.hellotwilio;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
import android.util.Log;
import com.twilio.client.Device;
import com.twilio.client.Twilio;
public class DeviceLoader extends AsyncTaskLoader<Device> {
    private static final String TAG = DeviceLoader.class.getSimpleName();
    public DeviceLoader(Context context) {
        super(context);
    }
    @Override
    public Device loadInBackground() {
        try {
            // ケイパビリティトークンを取得する
            String url = "http://{アプリ名}.herokuapp.com/auth";
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet get = new HttpGet(url);
            HttpResponse res = httpClient.execute(get);
            HttpEntity entity = res.getEntity();
            String token = EntityUtils.toString(entity);
            Log.d(TAG, "トークン:" + token);
            // Twilioにデバイスを登録する
            return Twilio.createDevice(token, null);
        } catch (Exception e) {
            Log.e(TAG, "エラー:" + e.getLocalizedMessage());
        }
        return null;
    }
}

 ケイパビリティトークンの取得はごく普通のGET処理になります。先ほどサーバに実装したケイパビリティトークンを取得するAPIを呼び出し、ケイパビリティトークンを取得します。

 Twilioへのデバイス登録はTwilio.createDevice()メソッドを使います。第1引数にはケイパビリティトークンを渡します。第2引数はDeviceListenerを渡しますが、今回は使わないのでnullを渡します。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る