ラベル dev の投稿を表示しています。 すべての投稿を表示
ラベル dev の投稿を表示しています。 すべての投稿を表示

2011年8月28日日曜日

C2DMをつかってみた

Android 2.2以降からC2DMというAndroidアプリにPushでメッセージを送信する機能を試してみる。
Appengineなら"Channel API"てのもPush通知に使えるみたいだけど、またこんど。

C2DM使うにはまず登録が必要
http://code.google.com/intl/ja/android/c2dm/signup.html

適当にフォームに入力して、少し待つ"AC2DM invitation"という件名のメールがきた。

"Please note that by default, all new sender accounts are held to a development-only quota.
This quota is sufficient for development and exploratory purposes."

ということで、今回登録されたのは開発のみに利用できるということだが特に問題ない。

ちなみに商用サービスで使うには、なにやら利用規模を見積もってメールでやりとりしないといけないみたいです。
"Before you launch a C2DM-enabled application to a large audience,
please reply to this email to discuss a production-level quota,
including estimates on the number of devices and average messages per device."

jumpnote、およびchrometophoneというアプリのソースが公開されていて参考になるみたい
http://code.google.com/p/jumpnote/
http://code.google.com/p/chrometophone/

アプリですが、chrometophoneを参考にすることとして
ここにあった
http://code.google.com/p/chrometophone/source/browse/trunk/android/c2dm/com/google/android/c2dm/

C2DMBaseReceiver.java
C2DMBroadcastReceiver.java
C2DMessaging.java

を利用します。

C2DMBaseReceiverを継承した、C2DMReceiverを作成。
こんな感じ。

public class C2DMReceiver extends C2DMBaseReceiver {
	
    public C2DMReceiver() {
        super(PushMessage.SENDER_ID);
    }
    
    // 登録時の処理
    @Override
    public void onRegistered(
		Context context, String registration_id) {
    	Log.i("C2DMReceiver#onRegistered", registration_id);
    }
    
    // 登録解除時の処理
    @Override
    public void onUnregistered(Context context) {
    	Log.i("C2DMReceiver#onUnregistered","onUnregistered");
    }
    
    // エラー時の処理
    @Override
    public void onError(Context context, String errorId) {
    	Log.i("C2DMReceiver#onError", errorId);
    }
    
    // サーバーからメッセージを受け取ったときの処理
    @Override
    public void onMessage(Context context, Intent intent) {
    	Log.i("C2DMReceiver#onMessage","onMessage");
        Bundle extras = intent.getExtras();
        if (extras != null) {
            String data1 = (String) extras.get("data1");
            String data2 = (String) extras.get("data2");
            Log.i("data1",data1);
            Log.i("data2",data2);
        }
    }
}


こんな感じの画面を表示するActivityを作成してそれぞれのボタンは以下のような実装。
SENDER_IDはC2DMに登録したものを指定。
        Button register = (Button) findViewById(R.id.register);
        register.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View view) {
				// C2DMサーバーへ登録リクエスト
				C2DMessaging.register(PushMessage.this, SENDER_ID);
			}
        });
        
        Button unregister = (Button) findViewById(R.id.unregister);
        unregister.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View view) {
				// C2DMサーバーへ解除リクエスト
				C2DMessaging.unregister(PushMessage.this);
			}
        });


つぎにAndroidManifest.xmlにパーミッションやサービスの設定を記述。
これもchrometophoneのものを参考にして自分の環境にあわせて適当に。
XMLがうまくここに書けなかった。。
http://code.google.com/p/chrometophone/source/browse/trunk/android/AndroidManifest.xml

今回apkはエミュレータにインストール。
エミュレータ上でGoogleアカウントにサインインしてないとregistration_idの取得ができなかったので
サインインをした。

さて動作確認ですが、サーバ側の実装はしていないのでcurlをつかってメッセージ送信してみます。
最初にAuth tokenを取得しなくてはいけないようです。
curl https://www.google.com/accounts/ClientLogin \
--data-urlencode Email=***sender account email*** \
--data-urlencode Passwd=***password*** \
-d accountType=GOOGLE \
-d source=Google-cURL-Example \
-d service=ac2dm
Email,Passwdはsenderとして登録したアカウントのもので置き換え実行すると以下のような値が取得できた。
SID=xxxxxxxxxxxxxxxx
LSID=xxxxxxxxxxxxxxxx
Auth=xxxxxxxxxxxxxxxx

このAuthをつかってメッセージ送信する。
curl --header "Authorization: GoogleLogin auth=*** auth token***" "https://android.apis.google.com/c2dm/send" \
-d registration_id=*** id **** \
-d data.data1=HelloPush \
-d data.data2=HelloPush123 \
-d collapse_key=something -k
registration_idはアプリで登録ボタン押下したときに取得したログに表示されたものを利用。
こんな感じで実行したら、メッセージ届きました。

パラメータの詳細とかはここ。
http://code.google.com/intl/ja/android/c2dm/index.html#push

C2MDをとりあえず使えたということで、ここまで。

2009年11月11日水曜日

#android 開発者向けにメールがきました

New version of Android Market Developer Distribution Agreement. Your action required.


新しい規約に同意してくださいとのことで。

2009年10月28日水曜日

#android 2.0 SDKがきた

複数のGmailアカウントを扱えるのはよさそう。
カメラでは、
* Built-in flash support
* Digital zoom
* Scene mode
* White balance
* Color effect
* Macro focus
とあったが、物理的にフラッシュはついてないからだめだな。

ブラウザはHTML5をサポートするとのこと。
ダブルタップズームは、マルチタッチの代わりの策かな。

詳しい内容はこちらを参照。
Android 2.0 Platform Highlights | Android Developers

2009年8月28日金曜日

マッシュルームサイトに載せていただきました

マッシュルームの特設サイトにMapMashとKaoMashを載せて頂きました!


adamrocker さんありがとうございます。

2009年8月27日木曜日

KaoMash 使い方

大体、機能がそろったので簡単に機能と使い方を紹介させてもらいます。

まず、simejiをインストールしておいてください。
単体でも一応使えますがあまりおすすめできません。

■simejiから起動して顔文字の入力
・顔文字に変換したい文字列を入力。この場合「わら」

・次にマッシュルームボタンを押下してKaoMashを選択


・起動しましたね。入力された文字列を条件として辞書の中から絞り込まれた
顔文字が一覧表示されます。
あとは好みの顔文字を選択すれば入力できます。

・検索ボタン、メニュー → 検索 から絞込みのやりなおしもできます。


・また、メニュー → 辞書に追加で新しい顔文字を追加できます。
読みと顔文字を登録して使ってみてください。


■そのほか、一覧で顔文字を長押しすると、編集・削除が可能です。

以上、simejiで顔文字入力の入力サポートをするマッシュルーム「KaoMash」のご紹介でした。

追記(2010/8/11)
mobile ASCII に詳しい紹介記事がありますので合わせて読んでもらえると使い方がよくわかるかと思います。記事はこちら「凄まじい数の顔文字をメールで使う「KaoMash」」。

2009年8月26日水曜日

EditTextでソフトキーボードのイベントをハンドリングする

以下のような実装でEditText上でEnterキーが押下された際に
検索を実行できるようになりました。

EditText searchWord = (EditText) findViewById(R.id.search_word);
searchWord.setOnKeyListener(new View.OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event) {
// ここではEditTextに改行が入らないようにしている。
if (event.getAction() == KeyEvent.ACTION_DOWN) {
return true;
}
// Enterを離したときに検索処理を実行
if (event.getAction() == KeyEvent.ACTION_UP
&& keyCode == KeyEvent.KEYCODE_ENTER) {
EditText word = (EditText) findViewById(R.id.search_word);
if (word != null && word.length() != 0) {
// ここに検索処理(省略)
}
return true;
}
return false;
}
});
なかなか調べてもわからなかったのでメモしておきます。

2009年8月24日月曜日

KaoMash 機能追加

新たな顔文字の登録、更新、削除を一通りできるようにしました。

あとは、
・一覧上での検索
・一括での辞書登録

なんかを実装していこうと思っています。
ただ、個人的には大体使えるものになったのでペースは落ちるかも。

顔文字入力のマッシュルーム

地図の次は、顔文字入力用のマッシュルームを公開しました。
こちらを参照

各自で辞書を読み込ませたり、追加、編集が自由に行えるようにしていきたいと思ってます。
ご意見、ご要望がありましたらコメントください。

2009年8月14日金曜日

MapMashURL入力機能追加

Google MapにリンクするURLを生成する機能を追加しました。

友人にお店やいまいる場所を教えるのに使えるかと。

近いうちにURL短縮できるようにしようかと思ってます。

2009年8月12日水曜日

MapMash

ちなみにMapMashはこちら
マーケットでsimejiとかで検索したら出ました~

アプリの公開Tips

アプリをマーケットにアップする際にいくつかやらなければいけなかったことをメモ。

基本的には、
http://developer.android.com/intl/ja/guide/publishing/app-signing.html
辺りを順に読んでいけばよいのだろうけど。。

  1. 公開リリースへの署名
  2. アプリケーションのバージョニング
これらは必須ですので必ずやることになります。

1はeclipseでプラグインをインストールして開発していたので簡単でした。
プロジェクトを右クリックして”Export Signed Application Package”して
ウィザードを進めていけば問題なくリリース用のapkができました。

ので、マーケットにアップロードしてみたところエラーがでました。
そう、2が必要なのです。

versionCodeとversionNameを設定しないとアップできないようですので、
マニフェストファイルに記述します。

android:minSdkVersion も書くようにメッセージが出ていたので記述しました。
そして晴れてアップすることができました。

初アプリ公開しました

MapMashというアプリをマーケットにアップしました。
このアプリはSimejiのマッシュルームと連携するものです。

Google Maps APIを利用していて、地図上でタップした場所の住所を取得して、
その値を入力値としてSimejiに返します。

Simejiで入力していた文字列で検索して、地図の初期表示をします。
それ以外には、GPS情報から現在位置を取得する機能を実装しています。

拡張は色々検討中です。

2009年8月11日火曜日

最初はマッシュアップから

アプリをつくり始めました。
手始めにいま自分の使用しているIMEであるShimejiと連携するマッシュルームを作ってみることに。

どんなものを作ろうとしているかというと、
マッシュルームから地図を開いて、入力していた値または、
現在位置周辺の住所を入力できるようにするものです。

Googleマップへのリンクの生成もできたら、人に場所を教えるのに使えるなとか思ってます。
その場合に、URL圧縮なんかもした方がいいんだろうなぁ。

あとは、変換履歴なんかも保存しておいて、そこから選択して入力なんかもできると便利かも。

まずは、スモールスタートで住所入力だけ対応できたらマーケットにアップしてみようかな。

2009年7月19日日曜日

HT-03Aをパソコンとつなぐ

自作アプリをHT-03Aの実機にインストールしてみようとしていきなりはまったのでメモ。

設定 > アプリケーション > 開発 > USBデバッグ

をONにしていない状態で一度つないでしまうと外部ストレージとしてSDカードにファイルを保存することしかできなくなってしまうようです。

その場合には、デバイスマネージャを開いて一度ドライバを削除し、
つなぎなおすとドライバのインストールウィザードが表示されてドライバのインストールが可能になります。

SDKの下に usb_driver/x86 を指定してドライバのインストールをしたら認識されるようになりました。