おまとめローンの情報サイト

490円〜のワンコイン仮想サーバー




2009年06月12日

Android 1.5 でのGoogle Talkプログラミング

Google Talk(Googleトーク)とは、Google が提供するチャットやパソコン通話がカンタンに楽しめるコミュニケーション ツールです。

今回はこのGoogle TalkをGoogle Android上に実装してみようと思います。

talk1.PNG

まず、Android上にGoogle Talkを実装するに当たって参考となる情報をネットで探した結果、以下のブログを参考とさせて頂きました。

 ・throw Life
  記事:Android用Google Talkクライアントをm5-rc14に移植

このブログはAndroid におけるプログラミングの情報が豊富でいつも参考にさせて頂いています。

また、上記の記事では完成したGoogle TalkのEclipseプロジェクトが公開されています。

Android SDK m5-rc14 ベースと古いSDKで作成されたものですが、今回はこのEclipseプロジェクトを使わせて頂き、Android SDK 1.5へ移植する形で作業を進めさせてもらいます。
【事前準備】
Google TalkクライアントのEclipseプロジェクトを前述のブログ記事よりダウンロードして適当なディレクトリに展開して置いてください。

ダウンロードは記事中の「Download」章にリンクが張られています。

【新規プロジェクト作成】
ダウンロードしてきたEclipseプロジェクトはAndroidのSDKバージョンが古く、マニフェストファイル「AndroidManifest.xml」についても最新のAndroid SDK 1.5のものと若干構成が異なるようです。

そのため、EclipseでAndroid SDK 1.5ベースのプロジェクトをまず作成します。

talk2.PNG

プロジェクト名は適当で構いませんが、ソースやリソースの修正を最低限とするため、下記の設定は合わせてください。

 ・アプリケーション名:GtalkDroid
 ・パッケージ名:com.adamrocker.android.gtalk
 ・Activity名:GtalkDroid

【ソースのインポート】
次に、事前にダウンロードし展開しておいたGoogle TalkクライアントのEclipseプロジェクトから必要なファイルを新規作成したプロジェクトにインポートします。

ワークスペースから新規作成したプロジェクト選択し、右クリックして表示されたメニューから「インポート」を選択してください。

インポート画面から「ファイルシステム」を選択し、「次に」ボタンを押下してください。

表示されたファイルシステムからのインポート画面の「次のディレクトリから」のテキストボックスに展開したGoogle Talkクライアントのプロジェクトのルートディレクトリを指定してください。

talk3.PNG

フォルダとソースのツリーが表示されますので以下の項目のチェックボックスをチェックし、「完了」ボタンを押下してください。

 ・lib ディレクトリ
 ・res ディレクトリ
 ・src ディレクトリ(ただし、R.javaのファイルは除外)
 ・valuesディレクトリ

※R.javaは自動生成のため不要です。

インポートが完了すると以下のような状態になります。

talk4.PNG

ただし、valuesの中身については、res/values配下にコピーし
空になったディレクトリは削除する必要があります。

何個かエラーがあるため「×」表示のファイルがありますがこれは順番に修正をしていきます。

【AndroidManifest.xmlの修正】
このファイルはエラーが出ていませんが、Google Talkで通信をするためにはUser Permisstionの設定が必要です。

「manifestタグ」の配下に以下の記述を追加してください。

<uses-permission android:name="android.permission.INTERNET"/>


【res/layout/settings.xmlファイルの修正】
15行目と27行目に以下のエラーが存在します。

 ・ERROR No resource identifier found for attribute 'textAlign' in package 'android'

これは、「TextView」から文字の寄せを設定する属性である「android:textAlign」が無くなったためです。

この代替の属性として「android:gravity」を使用します。

 [変更前]
  android:textAlign="end"
 [変更後]
  android:gravity="right"

【src/GtalkDroid.java の修正】
まず最初にインポートのエラーから見ます。

「インポートされた org.jivesoftware は見つかりません」というエラーが多く発生していますが、これはGoogle Talkの通信を行うためのJavaライブラリ「smack.jar」が見えていないためです。

上記のライブラリは lib ディレクトリにインポートしていますので、Javaのビルドパスに以下を追加してください。

 ・lib/smack.jar

talk5.PNG

次にメニュー関連の処理の修正です。

11行目に以下のエラーが有ります。

 ・インポートされた android.view.Menu.Item は見つかりません

上記のクラスは以下のように変更されていますのでクラスの記述を置き換えます。

 ・android.view.MenuItem

また、上記のクラスの変更に伴い、166行目の関数の第2引数の型についても変更する必要があります。

 [変更前]
public boolean onMenuItemSelected(int featureId, Item item)

 [変更後]
public boolean onMenuItemSelected(int featureId, MenuItem item)


166行目を変更すると、今度は168行目でエラーが発生します。

 ・メソッド getId() は型 MenuItem で未定義です

MenuItemでは getId() でなく getItemId() を使用するので修正します。

メニュー関連ももう1箇所修正があります。
159行目、160行目の以下についてです。

menu.add(0, LOGOUT, R.string.logout);
menu.add(0, RECIPIENT, R.string.recipient);


menu.addの第2引数に「itemID」を指定するよう修正が入っていますが上記にはありませんので以下のように修正します。

menu.add(0, Menu.NONE, LOGOUT, R.string.logout);
menu.add(0, Menu.NONE, RECIPIENT, R.string.recipient);


最後に195行目のキーイベント関連のエラーです。
以下のようなエラーが発生しています。

 ・KeyEvent.KEYCODE_NEWLINE を解決できません

上記のキーコードはおそらくですが、以下の様に変更になったのではと思いますので、そのように修正します。

 ・KeyEvent.KEYCODE_ENTER

これで全てのエラーが取れました。

これを実行した結果表示されるのが最初にお見せしたアプリの画面となります。

今回の改造のベースとなったEclipseプロジェクトの提供元である
throw Lifeの管理者 adamrocker 様より改造後のEclipseプロジェクトの公開を快諾して頂けました。
この場を借りて厚く御礼申し上げます。

【改造後Eclipseプロジェクト】
 GtalkDroid_sdk1_5.zip

皆さん、お試しください。
posted by Android at 22:38 | Comment(4) | Google Talk | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
はじめまして
イヒョンオクと申します。
今、日本で住んでいる韓国人です。

僕はAndroidの勉強をやっております。
最近チャットアプリについて勉強しています。
そのため資料を探している途中ここに来るようになりました。
良い情報、ありがとうございます。
すごく役に立っています。


突然、コメントを残していてすみません。

【throw Life】からファイルをダウンロードさせて頂き、
上記のようソースを修正致しましたが
【throw Life】に載せられている動画のように動いてないです。
その理由がよく分からなくてコメントを書いています。

お忙しいところ申し訳ありませんが
上記のプログラムについてお聞きしても宜しいでしょうか。

Posted by イヒョンオク at 2009年11月11日 19:44
イ さん
はじめまして、このブログの管理人です。
役に立っていると言って頂けて光栄です。

本題ですが、【throw Life】の動画どどのように動作が異なるのでしょうか?

改めて、改造後のプロジェクト(本エントリーにも改造後のプロジェクトのZIPファイルのリンクを張っています)で確認したところ、動作自体は正常のようです。

気になる点があるとすれば、
「Acount Setting」で入力した「User ID」のGoogleアカウントを「Recipient」で入力すると拒否される点があります。

私は複数のGoogleアカウントを持っているので異なるアカウント同士で動作を確認しました。

回答になっていますでしょうか?
Posted by 管理人 at 2009年11月14日 11:51
管理様

李です。
返事が遅くなってすみません。T.T

色々教えて頂きありがとうございます。
十分勉強になっております。

早速ですが
私が間違っていました。すみません。
管理様が言う通りに実行させると
正常に動いています。

すみません。お忙しいところご迷惑かけました。

これからも宜しくお願いいたします。
Posted by イヒョンオク at 2009年12月08日 17:25
管理人様。
はじめまして。

Androidのチャットアプリ、大変参考になりました。
すいませんが、1つ教えて欲しい事があります。

アプリのテスト時に、1つのPCでAndroidの
エミュレータを2つ同時に起動して、
それぞれ異なるアカウントを使ってテストしたいのですが、
可能でしょうか?

申し訳ありませんが、どのように確認されているか
教えてもらえませんか?
宜しくお願い致します。
Posted by さいとう at 2010年01月09日 02:03
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。