[IT][Android] Android SMS Demo

以前書いたとおり、Androidのコンテストに参加すべくアプリを作ったりしている。で、先日のAndroid SDKのアップデートでSMSが追加されたということなので、早速アプリを作ってみた。


まあ、作ってみたというよりは、下記サイトのを動作確認したって感じだけどね。


Android - Listen for incoming SMS messages « Show me the code!
http://davanum.wordpress.com/2007/12/15/android-listen-for-incoming-sms-messages/


変えてる所と言えば、設定ファイルでactivityを消したらエラーになったので加えてるくらいかな。
で、受信のプログラムなんだけど、これってUIが用意されてないのかな?プログラムの中でメッセージを受け取って表示しているみたい。



ソースは、こんだけ。

  • AndroidManifest.xml

    

    
        
            
                
                
            
        
          
              
                  
              
          
    

  • AndroidSMSDemo.java
package com.gmail.syunduel.demo.android.sms;

import android.app.Activity;
import android.os.Bundle;

public class AndroidSMSDemo extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
    }
}
  • SMSApp.java
package com.gmail.syunduel.demo.android.sms;

import android.content.Context;
import android.content.Intent;
import android.content.IntentReceiver;
import android.app.NotificationManager;
import android.os.Bundle;
import android.provider.Telephony;
import android.util.Log;
import android.telephony.gsm.SmsMessage;

public class SMSApp extends IntentReceiver {

	private static final String LOG_TAG = "SMSApp";

	/* package */
	static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

	@Override
	public void onReceiveIntent(Context context, Intent intent) {
		// TODO Auto-generated method stub
		if (intent.getAction().equals(ACTION)) {
			StringBuilder buf = new StringBuilder();
			Bundle bundle = intent.getExtras();
			if (bundle != null) {
				SmsMessage[] messages = Telephony.Sms.Intents
						.getMessagesFromIntent(intent);
				for (int i = 0; i < messages.length; i++) {
					SmsMessage message = messages[i];
					buf.append("Received SMS from  ");
					buf.append(message.getDisplayOriginatingAddress());
					buf.append(" - ");
					buf.append(message.getDisplayMessageBody());
				}
			}
			Log.i(LOG_TAG, "[SMSApp] onReceiveIntent: " + buf);
			NotificationManager nm = (NotificationManager) context
					.getSystemService(Context.NOTIFICATION_SERVICE);

			nm.notifyWithText(123, buf.toString(),
					NotificationManager.LENGTH_LONG, null);

		}
	}
}


んで、エミュレータを起動した後にtelnetコマンドでSMSを送信すると、エミュレータの画面にメッセージが表示される。ポートは5554である。

telnet 5554
(telnet開始)
sms send <電話番号> <メッセージ>

ちなみに日本語には対応していないようだ。native2asciiした文字を渡しても化け化け。


さて、SMSってメールみたいな画面があるのかと思ってたんだけど、どうしようかなぁ。