Archive for the ‘Java’ Category

8月
06

Android Marketにアプリケーションを公開しましたっ!

名前は、gTranslatorです。いままでのご紹介してきたサンプルすべてを合体させたような感じに仕上がっています。

とは言いましても、いくつか、連載時のサンプルから仕様変更したところがあります。

一番大きな変更は、バックグラウンドでクリップボードの中身を翻訳するところです。サンプルでは、加速度センサーを利用して、携帯を振った時に、一定の加速度に達したのをトリガーに翻訳をするようにしていたのですが、やめました。
※ バックナンバーはこちら

なぜかというと、町中で携帯を振っているのを想像すると、やっぱりどこか不自然な気がして、あまり、この機能自体使われなくないのでは?という懸念があったのと、加速度についての知識がそれなりにないと、なかなか最適な値が割り出せないということからでした(予期せぬところで翻訳されてしまったということがありました)。

あとは、一部アイコンを自作して、デザインをちょっと整えた感じです。

それから、このようなの翻訳系のアプリケーションは、競合が多いのですが、このアプリのウリは、日本語に翻訳した結果を読み上げることができる点です。Android JaTTSライブラリのおかげです。感謝です。

履歴も残せますので、海外旅行の際などには、あらかじめ定型的な会話の翻訳結果を記録しておいて現地で活用する、なんて用途でも使えると思います。

もう1つは、クリップボードの中身を翻訳するという点です。調べものをしている際に、英語サイトに行き着くことが多々あります。大まかには理解できても、特定の単語だけがわからない、ということがあったりします。そんな時には、その単語をクリップボードにコピーするだけで、訳がわかるのです。あらためて翻訳アプリを立ち上げたり、辞書のウェブサイトにアクセスする必要もありません。

予想外だったのは、、、こどものおもちゃになったりもします(実際に私の娘も、ひとしきり遊んでいました)。自分がしゃべった言葉が、別の言葉にかわって返ってくるって言うのがおもしろいのでしょうか?

音声認識は、難しい表現になると、ネイティブに近い発音の方が認識されやすいので、発音の勉強などにもなるかもしれません。

あっ、それと、このアプリのベースとなったTranslatAIRは9カ国語に対応しているのですが、今回は、英語、日本語、中国語、および韓国語の4カ国語にしました。なぜなら、他の言語での音声認識テストが、まったくできなかったからです。私の発音では認識してくれないんです。。。

欲を出しすぎてもいけないですから(笑)

それはさておき、せっかくAndroid Marketに公開したので、最後に、その手順をまとめておきたいと思います。

デベロッパー登録

こちらから、デベロッパー登録を行います。

1.signup

注意するのは電話番号です。

なお、「電話番号」の欄には、市外局番の先頭の「0」を取り、日本の国番号を示す「81」を付けて記載する。例えば、電話番号が「0123-45-6789」の場合は「+81-123-45-6789」といった具合だ。もちろん、ここで記入した電話番号は一般のユーザーには公開されない。

第3回 Androidアプリケーションを公開する – Androidで広がる、携帯アプリ開発の世界:ITproより引用。

なるほどなるほど~

次ぎに、登録料を支払います。25.00ドルかかります。iPhoneのデベロッパー登録料よりも安いですね。

2.checkout

「Checkout」を選択すると、決済画面が表示されます。

3.payment

必要な情報を入力して、「同意して続行する」ボタンを押します。

4.confirm

確認画面が表示されました。問題なければ、「今すぐ注文する」ボタンを押します。

5.complere

完了画面が表示されました。「Android Marketに戻る」リンクをクリックします。

6.agreement

同意画面が表示されました。決済と同意が逆な気がします。。。
「同意して次へ」リンクをクリックします。

7.market

Android マーケットへの登録が承認されました。これで、アプリケーションの登録が可能になりました。

アプリケーションをアップロード

続いて、アプリケーションをアップロードを選択します。前画面の「アプリケーションをアップロード」を選択します。

8.upload

必要な情報を入力して、いよいよアップロードです。「公開」を選択します。

9.publish

無事に公開できました!

開発時には、Emulatorを利用している場合などにも、他のアプリケーションをインストールしたい場合があります。ですが、Android Marketアプリが入っていないので、インストールできません。Androidアプリの場合、iPhoneアプリと違い、必ずしもAndroid Marketを通さないと行けないわけではないので、自前のサーバで公開することもできます。

今回はリリース記念ということで、ここからもダウンロードできるようにしてきたいと思います。

Androidを持っている人も、持っていない人も、是非、試してみてくださいっ!

8月
05

アプリケーションの開発が完了しました!早速、Android Marketに公開したいと思いますが、その前に、いくつか最終確認をしたいと思います。

第3回 Androidアプリケーションを公開する – Androidで広がる、携帯アプリ開発の世界:ITproを参考に進めました。

AndroidManifest.xmlを見直します。ポイントは以下の3点です。

  1. manifest(ルート)ノードのandroid:versionCode属性
  2. manifest(ルート)ノードのandroid:versionName属性
  3. uses-sdkノードのandroid:minSdkVersion属性

1.のversionCodeについては、

android:versionCode属性は、アプリケーションのバージョン番号を表すもので、整数値で指定する。この数値は、開発者がアプリケーションをアップデートする度に、増やす必要がある。

とありました。微小な調整レベルの場合でも、大きな機能改善などの場合でも、公開しているパッケージをアップデートする際などに、カウントアップさせていくものだと解釈しました。

2.のversionNameについては、

android:versionName属性は、ユーザーにバージョン情報を提示するためのもので、任意の文字列を指定できるが、ユーザーにわかりやすい文字列を指定する必要がある。

こちらは、アプリケーションの概要などに表現される、バージョン情報を示すものだと解釈しました。

3.のminSdkVersionについては、

なお、要素の「android:minSdkVersion」属性では、アプリケーションが最低限必要とするAndroidプラットフォームのバージョンを、開発者が指定できる。

ということなので、TextToSpeech機能を使用している本アプリでは、Android 1.6を示すLevel4を指定しました。

<uses-sdk android:minSdkVersion="4" />

次に、署名つきのアプリケーションとしてパッケージングします。

Eclipseの「Package Explorer」より、該当プロジェクトのコンテキストメニューを開きます。

menu

「Android Tools」から、「Export Signed Application Package…」を選択すると、以下のような画面が開きます。

checks

問題がなければ、次に進みます。

keystore

「Keystore selections」画面が開きます。新規作成しますので、「Create new keystore」を選択して、keystoreの出力先とパスワードを入力して、次に進みます。

creation

「Key Creation」画面が開きますので、必要な情報を入力して、次に進みます。が、一番下の「Country Code」に何を入れてよいか一瞬とまどいました。調べてみたところ、

Country Codeは日本を表す81を設定します。

Androidコンテンツ作成支援 E-LEARNINGより引用。

とありました。電話番号と同じですね。次に進みます。

export

署名つきアプリケーションの出力先を指定して、次へ進めば完了のはずでしたが、なにやらエラーが出てしまいました。

error

key tool エラー:java.io.IOException: Incorrect AVA format

なかなか進みません。。。

調べてみると、どうやら、Key作成のために入力した情報に、カンマが含まれていてはいけないようです。

In my case, I had used a comma inside the Organization name. Removing the comma from this name fixed the problem and allowed me to fully export my signed .apk file.

Android Development Error: incorrect AVA format | MortalPowersより引用。

組織名のところに入力した「, Inc.」を消して、再度試したところうまくいきました!

これでパッケージングが完了したので、試しに、実機で起動してみたところ、今度はAdMobの広告が出ません。どうやら、LOCATIONに該当する広告が見つからないからのようです。

Android Market公開を目指してAndroidアプリを開発する!(広告表示実装編)で、

オプションで、ACCESS_COARSE_LOCATIONとACCESS_FINE_LOCATIONの権限の指定も出来るようですが、「and/or」とあるので、どちらかを指定しても、両方を指定しても良いように読み取れます。どちらもLOCATIONにあわせた広告の表示をするためのもののようですが、COARSEは粗い、FINEは最適なということだと理解しました。

ACCESS_FINE_LOCATIONを設定することにしましたが、表示される頻度が少なくなってしまうのであれば、機会損失にあたります。急遽、ACCESS_COARSE_LOCATIONにすることにしました。

はじめは、相変わらず表示されていなかったのですが、何回か試すうちに表示されるようになりました。

これで、すべての準備はが整いました!後は、Android Marketに登録するのみですが、続きは次回にしたいと思います。

8月
04

Android Market公開を目指してAndroidアプリを開発する!(広告導入準備編)では、AdMobへのサインインとアプリケーションの登録が完了しました。

今回は、Android Market公開を目指してAndroidアプリを開発する!(設定機能装編)で作ったサンプルにAdMobの広告を表示させたいと思います。SDKの説明書、AdMob_Android_SDK_Instructions.pdfの手順に従って進めていきたいと思います。

※ AdMob_Android_SDK_Instructions.pdfは、AdMobのウェブサイトからダウンロードできます。詳しくは、Android Market公開を目指してAndroidアプリを開発する!(広告導入準備編)を参考にしてください。

Step 1

In your project’s root directory create a subdirectory libs . This will already be done for you if you used Android’s activitycreator tool. Copy the AdMob JAR (admob-sdk-android.jar) file into that libs directory.

admob-sdk-android.zipを解凍すると、admob-sdk-android.jarというファイルがありますので、Eclipseのプロジェクト配下にあるlibフォルダに保存します。

※ admob-sdk-android.zipは、AdMobのウェブサイトからダウンロードできます。詳しくは、Android Market公開を目指してAndroidアプリを開発する!(広告導入準備編)を参考にしてください。

このライブラリをプロジェクトに登録します。「Project」の「Properties」を開きます。

addjar

左ペインより「Java Build Path」を選択し、admob-sdk-android.jarを「Libraries」に追加します。

Step 2

Add your publisher ID to your AndroidManifest.xml . Just before the closing </application> tag add a line to set your publisher ID. If you publisher ID were, “a149afxxxx”, the line would look like this:

AndroidManifest.xmlに以下の内容を追記します。

<!– The application’s publisher ID assigned by AdMob –>
<meta-data android:value=”a149afxxxx” android:name=”ADMOB_PUBLISHER_ID”
/>
</application>

“a149afxxxx”の部分は、AdMobのアカウント毎に割り振られるパブリッシャーIDです。AdMobウェブサイトにある、以下のページ(赤枠内)に記載されています。

id

※ 画像上のIDはぼかし加工しています。

Step 3

さらに、アプリケーションにインターネットに接続する権限を与えます。

Add the INTERNET permission to your AndroidManifest.xml just before the closing </manifest> tag:

AndroidManifest.xmlに以下の権限を追記します。

<!– AdMob SDK permissions –>
<uses-permission android:name=”android.permission.INTERNET” />
</manifest>

このアプリケーションでは、もともとインターネットに接続する権限は与えてあったので、ここで、追記する必要はありませんでした。

Optionally, you can add the ACCESS_COARSE_LOCATION and/or
ACCESS_FINE_LOCATION permissions to allow AdMob the ability to show geo-
targeted ads.

オプションで、ACCESS_COARSE_LOCATIONとACCESS_FINE_LOCATIONの権限の指定も出来るようですが、「and/or」とあるので、どちらかを指定しても、両方を指定しても良いように読み取れます。どちらもLOCATIONにあわせた広告の表示をするためのもののようですが、COARSEは粗い、FINEは最適なということだと理解しました。

両方指定すると、どうなるのでしょう?ナゾです。

ということで、今回はACCESS_FINE_LOCATIONの片方だけを指定するようにしました。

Step 2、Step 3をまとめると、AndroidManifest.xmlは、こんな感じになりました。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="jp.flashcast.translator.android"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TranslatorSample13"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
	   	<service android:enabled="true" android:name=".service.TranslateService"></service>
		<activity android:name=".view.ConfigActivity"></activity>
		<meta-data android:value="xxxxxxxxxxxxxxx" android:name="ADMOB_PUBLISHER_ID" />
    </application>
	<uses-permission android:name="android.permission.INTERNET" />
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest> 

Step 4

Paste the following into your attrs.xml file:

attrs.xmlファイルに以下の内容をコピーします。

<declare-styleable name=”com.admob.android.ads.AdView”>
<attr name=”backgroundColor” format=”color” />
<attr name=”primaryTextColor” format=”color” />
<attr name=”secondaryTextColor” format=”color” />
<attr name=”keywords” format=”string” />
<attr name=”refreshInterval” format=”integer” />
</declare-styleable>

attrs.xmlがない場合には、/res/values/ディレクトリの下に、新規作成します。

If your project does not already have an attrs.xml file, then create one in the
/res/values/ directory of your project, and paste the following:

attrs.xmlは以下のようになります。

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <declare-styleable name="com.admob.android.ads.AdView">
  <attr name="backgroundColor" format="color" />
  <attr name="primaryTextColor" format="color" />
  <attr name="secondaryTextColor" format="color" />
  <attr name="keywords" format="string" />
  <attr name="refreshInterval" format="integer" />
 </declare-styleable>
</resources> 

Step 5

画面のlayoutファイルに、広告のレイアウトを追記します。

Create a reference to the attrs.xml file in your layout element by adding xmlns 
line
 that 
includes 
your 
package 
name 
specified
 in
 AndroidManifest.xml. For
example, 
if 
your 
package
 name
 were
 com.example.SampleApp, 
you
 would
 include this line:

xmlns:myapp=”http://schemas.android.com/apk/res/com.example.SampleApp”

com.example.SampleAppの部分は、自分のアプリケーションのパッケージ名に変更します。

翻訳画面に追加してみました。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:translator="http://schemas.android.com/apk/res/jp.flashcast.translator.android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <EditText
    	android:id="@+id/srctext"
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent"
	    android:layout_weight="1"
	    android:layout_margin="5dp"
	    android:inputType="textMultiLine"
	    android:gravity="top"
	    />
	<LinearLayout
		android:orientation="horizontal"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		>
		<Spinner
			android:id="@+id/srclanguage"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
		    android:layout_weight="1"
			android:layout_marginLeft="5dp"
			/>
		<ToggleButton
			android:id="@+id/vector"
		    android:layout_width="wrap_content"
			android:layout_height="fill_parent"
			android:textOff=">>"
		/>
		<Spinner
			android:id="@+id/dstlanguage"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
		    android:layout_weight="1"
			android:layout_marginRight="5dp"
			/>
	</LinearLayout>
    <EditText
    	android:id="@+id/dsttext"
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent"
    	android:layout_weight="1"
	    android:layout_margin="5dp"
	    android:inputType="textMultiLine"
	    android:gravity="top"
	    />
	<LinearLayout
		android:orientation="horizontal"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:gravity="right"
		>
		<Button
			android:id="@+id/voice"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
	    	android:layout_weight="1"
			android:layout_marginLeft="5dp"
		    android:text="voice"
		    />
		<Button
			android:id="@+id/play"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
	    	android:layout_weight="1"
		    android:text="play"
		    />
		<Button
			android:id="@+id/tweet"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
	    	android:layout_weight="1"
		    android:text="tweet"
		    />
		<Button
			android:id="@+id/translate"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
	    	android:layout_weight="1"
	    	android:layout_marginRight="5dp"
		    android:text="translate"
		    />
	</LinearLayout>
	<com.admob.android.ads.AdView
		android:id="@+id/ad"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		translator:backgroundColor="#000000"
		translator:primaryTextColor="#FFFFFF"
		translator:secondaryTextColor="#CCCCCC"
		/>
</LinearLayout>

※ xmlnsはtranslatorとしました(3、93、94、95行目)。

Step 6

最後に、AdMobの広告がきちんと表示されるか確認します。

When integrating AdMob ads into your application it is recommended to use testmode. In test mode test, ads are always returned.

テストモードにすると、常に広告表示が行われるようです。

Test mode is enabled on a per-device basis. To enable test mode for a device, first request an ad, then look in LogCat for a line like the following:

To get test ads on the emulator use AdManager.setTestDevices…

テストモードでは、確認するデバイスのIDが必要です。デバイスIDは、EclipseのLogCatビューで確認できます。「Window」メニューから「Show View」を選び、「Other」を選択すると、以下のような画面が表示されます。

win

LogCatを選択すると、Eclipse上に表示されるようになります。

AdManager.setTestDevices( new String[] {
     AdManager.TEST_EMULATOR,             // Android emulator
     "E83D20734F72FB3108F104ABC0FFC738",  // My T-Mobile G1 Test Phone
} );

このようなロジックを記述して、実機でアプリケーションを起動すると、LogCatにデバイスIDが表示されます。
※ テストするデバイス数だけ、IDが指定できるようです。
※ 2行目の書式は、エミュレータでテストすることを示しています。

logcat

実行した結果は、以下のようになりました。

admob

広告を押してみると、

google

Googleのサイトが表示されました。

これで、広告表示の対応が完了しました。あとは、リリースするのみです。早くリリースしたいところですが、漏れが無いように準備したいと思います。

今回、広告を表示したのはサンプルアプリケーションのため、ソースの添付はなしとさせていただきます。ご了承下さい。

8月
03

連載で開発してきた翻訳アプリケーションですが、Android Marketには無料アプリとして公開するつもりなので、公開前に広告を表示するようにしたいと思います。

ちょっと調べたところ、スマートフォン向けアプリケーションに対応した広告では、以下の2つが有名どころのようです。

今回は、AdMobにすることにしました。
導入準備編ということで、サインアップとアプリケーションの登録手順を簡単にまとめたいと思います。

サインアップ

AdMobウェブサイトのトップページより、

0.admobtop

「今すぐスタート」ボタンをクリックすると、アカウント登録ページが表示されます。

1.admobreg

住所の入力で、ワーニングが何度か出てはまりました。注意点は、

  • 県名→州
  • 市区町村→市区町村(そのまま)
  • 以降の住所→住所

という感じで入力するところでしょうか。

入力が完了し、「送信」ボタンを押すと、電子メール確認ページが表示されます。

2.admobreg

この後、入力したメールアドレスに、AdMob登録の確認用メールが届きます。届いたメールには、入力したメールアドレスが正しいことを確認するのと、アカウント登録を完了するためのURLがあります。それをクリックすると、以下のようなページが表示されます。

3.admobreg

以上で、サインアップは完了です。

アプリケーションの登録

続いて、アプリケーションの登録です。画面上部のナビゲーションより「マーケットプレイス」メニューを選ぶと、以下のようなページが表示されます。

4.market

サブナビゲーションの「サイト及びアプリケーション」メニューを選択し、

5.menu

サイト及びアプリケーションページに移動します。

6.apptop

「サイト/アプリケーションの追加」を選択すると、サイト/アプリケーションの追加ページが表示されます。

7.addapp

「Androidアプリケーション」を選択すると、画面下部にアプリケーションの情報を登録する欄が表示されます。

8.addapp

「AndroidパッケージURL」欄は、Android Market公開後の特別なURLですが、まだ、申請していないので、ひとまず、このアプリの紹介ウェブサイトのURLにしてみました。特に問題はありませんでした。

「次へ」ボタンを押すと、アプリケーションの追加完了です。

9.addappend

「AdMob Android SDKのダウンロード」ボタンを押して、admob-sdk-android.zipをダウンロードしておいてください。また、「SDKの説明書をPDF文書でダウンロードしてください。」のリンクより、PDFをダウンロードしておいてください。実装編で利用します。

これで、Androidアプリに広告を表示するための準備が整いました。次回は、広告を表示させる部分を実装していきたいと思います!

8月
03

Android Market公開を目指してAndroidアプリを開発する!(通知機能実装編)の続きです。

今回は、アプリケーションの設定を変更する機能を実装していきたいと思います。これが、連載で実装してきた最後の機能となります。長かったAndroid向け簡易翻訳アプリケーションの開発もいよいよ終わりです。

Androidには、PreferenceActivityクラスという設定画面用のActivityがあらかじめ用意されてますので、こちらを使って実装していきたいと思います。

Androidのド肝 ? 設定画面の作り方(PreferenceActivity)を参考にさせていただき、PreferenceActivityクラスを継承したActivityクラスを作りました。

package jp.flashcast.translator.android.view;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import jp.flashcast.translator.android.R;

public class ConfigActivity extends PreferenceActivity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.config);
	}
}

画面の構成はxmlファイルに定義します。12行目で指定しているconfig.xmlファイルです。今までlayoutのxmlファイルはres/layoutフォルダに配置していましたが、今回はresフォルダの下にxmlフォルダを作成して、そこに配置しました。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android">
  <PreferenceCategory android:title="翻訳設定">
  	<ListPreference
  		android:key="list_src_language"
  		android:title="翻訳される言語"
  		android:summary="翻訳対象となる言語のデフォルトを設定します。"
  		android:dialogTitle="選択してください。"
  		android:defaultValue="en"
  		android:entries="@array/language_label"
  		android:entryValues="@array/language_value" />
  	<ListPreference
  		android:key="list_dst_language"
  		android:title="翻訳結果の言語"
  		android:summary="翻訳結果となる言語のデフォルトを設定します。"
  		android:dialogTitle="選択してください。"
  		android:defaultValue="ja"
  		android:entries="@array/language_label"
  		android:entryValues="@array/language_value" />
  </PreferenceCategory>
</PreferenceScreen>

メイン画面には、何語から何語に翻訳するかを選択するSpinnerコントロールがありますが、今回はこのデフォルトを設定する画面にしてみました。

画面は、こんな感じです。

config

設定項目を選択すると、言語選択のダイアログが表示されます。

languages

次に、この設定画面を開くところをメイン画面に実装します。オプションメニューから開くことにしましたので、まず、オプションメニューを設定します。

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	menu.add(Menu.NONE, Menu.FIRST + 1, Menu.NONE, "設定");

    	return super.onCreateOptionsMenu(menu);
    }

Android端末の本体についている「menu」ボタンを押すと、オプションメニューが表示されます。

menu

このメニューを選択して、設定画面を開くところは以下のようにしました。

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    	boolean result = false;

    	if (item.getItemId() == (Menu.FIRST + 1)) {
        	Intent intent = new Intent(this, ConfigActivity.class);
			intent.putExtra("ConfigModel", cmodel);
        	intent.setAction(Intent.ACTION_VIEW);
        	startActivity(intent);
        	result = true;
    	}

    	return result;
    }

設定が変更されたら、メイン画面のほうに反映したいので、設定変更時の処理を実装します。

メイン画面に、SharedPreferences.OnSharedPreferenceChangeListenerインターフェイスを実装します。

public class TranslatorSample12 extends Activity implements Runnable, OnInitListener, OnSharedPreferenceChangeListener {

設定変更時の処理は以下のようにしました。

	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
			String key) {
		cmodel.setSrcLanguage(sharedPreferences.getString("list_src_language", "en"));
		cmodel.setDstLanguage(sharedPreferences.getString("list_dst_language", "ja"));

		if (gmodel == null) {
			ToggleButton vector = (ToggleButton)findViewById(R.id.vector);

	    	Spinner spSrc = (Spinner)findViewById((!vector.isChecked()) ? R.id.srclanguage : R.id.dstlanguage);
	    	Spinner spDst = (Spinner)findViewById((!vector.isChecked()) ? R.id.dstlanguage : R.id.srclanguage);

	    	setSelectedItem(spSrc, cmodel.getSrcLanguage());
	    	setSelectedItem(spDst, cmodel.getDstLanguage());
		}
	}

最後に、メイン画面が初期表示されたときにも、設定されている内容を反映させたいので、画面初期化処理の1つに以下のような処理を追加しました。

    private void initConfigModel() {
        if (cmodel == null) {
        	cmodel = new ConfigModel();
        }

    	SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    	preferences.registerOnSharedPreferenceChangeListener(this);

		cmodel.setSrcLanguage(preferences.getString("list_src_language", "en"));
		cmodel.setDstLanguage(preferences.getString("list_dst_language", "ja"));
    }

これで、アプリケーションを起動すると、メイン画面にデフォルトの翻訳設定が反映されるようになりました。

main

※ 初期値は「English」から「Japanese」に翻訳する設定になっています。

このように、設定画面をとても簡単に用意することができました。PreferenceActivityクラス、是非、試してみてください!

サンプルソース

サンプルソースには、Android Market公開を目指してAndroidアプリを開発する!(TextToSpeech日本語対応編)でご紹介した日本語読み上げライブラリをlibフォルダ配下にandroid-jatts-0.0.1.jarも含んでいますが、プロジェクトへの登録が再度必要ですので、ご注意ください。

  • Search:
  • flashcastとは?

    東京を中心に、現在フリーランスとして活動しているITエンジニア、および、かつてフリーランスとして活動していた起業家達が立ち上げたコミュニティーです。

    みんなで集まって面白いことをやろう!形に残そう!ということで、ブログをはじめました。

    技術情報や、フリーエンジニアに役立つ情報などを、ご紹介できたらと思っています。

    お問い合わせ:
    info@flashcast.jp
  • カレンダー

    2010年9月
    日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
    « 8月    
     1234
    567891011
    12131415161718
    19202122232425
    2627282930  
  • メンバー紹介

    もじゃもじゃ
    flashcastのリーダー

    3年ほどフリーのITエンジニアとして活動。現在は、社員2名の株式会社を経営しています。

    一攫千金を夢見る野心家です。

    ライブキャスト

    yasu
    ダイバー

    自宅サーバーでホームページを作り始めました。

    少しずつ記事を増やしていきますので足を運んでください。

    よろしくお願いします。

    sa-sa-ki.jp

    のら
    たびびと

    ねこ好きに悪人はいなーいっ!!

    バイクや車も好きです。

    めぐ
    デザイナーのたまご

    音楽とデザインとお酒をこよなく愛する永遠のダイエッター。

    現在ペンタブレットでイラストを勉強中。

    Hiro
    コンサル

    PMやSEの案件を業務委託で請けることが多いですが、小規模案件も受託でやっています。

    得意な分野はマイクロソフト製品や関連技術によるシステム構築です。

    KEI
    取締役の風格

    最年少なのに、メンバーで1番の貫禄の持ち主!?

    C#や.netなどサーバ側の開発が得意。

    ろっきー
    美食家★パパ

    自分にとっての息抜きは、ドライブして温泉に入って、美味しいご飯を食べる事。

    ココロとカラダのリフレッシュを大切にし、日々の仕事に励む一児の父親です。

    郵便番号検索

    my-hobby

    とのさま
    げーむのおうさま

    大人なのに好きなことしかやらない駄目人間。

    Web系が得意、アクセスは苦手><

    tonosamart.com

    セクレタリアト
    ギャンブラー

    フリーランス時代は仲間の現場を探すことが多く、それをきっかけに会社を設立。

    現在はSI業に特化せず、他の業種にも興味を持ち始めています。

    メドレー株式会社

  • 広告