2010년 4월 29일 목요일
BlueWatch Project #1
Bluetooth Watch 연동 프로그램을 만들려면 먼저 폰에 언제 전화가 오거나 문자메시지를 받았는지 알 수 있어야만 한다. 안드로이드는 이벤트가 발생하면 해당 intent를 브로드캐스트 해 주기 때문에 BroadcastReceiver를 설정해주면 원하는 인텐트를 수신할 수 있게 된다.
// TelephonyManager for receiving phone state change
// (IDLE, OFFHOOK, RINGING)
MyPhoneStateListener phoneListener=new MyPhoneStateListener();
TelephonyManager telephony = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
전화상태 변경(OFFHOOK, IDLE, RINGING)에 대한 브로드캐스트를 받는 리시버를 설정해주는 코드로 여기서 지정해 준 callback 함수인 phoneListener가 전화기의 상태가 변경될 때 마다 호출된다.
// BroadcastReceiver for SMS
BroadcastReceiver rcvIncoming = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
Log.i("NAUTES", "SMS received");
Bundle data=intent.getExtras();
if (data!=null) {
Object pdus[] = (Object[])data.get("pdus");
String message = "New message:\n";
String sender = null;
for (Object pdu:pdus) {
SmsMessage part=SmsMessage.createFromPdu((byte[])pdu);
message += part.getDisplayMessageBody();
if (sender==null) {
sender = part.getDisplayOriginatingAddress();
}
}
Log.i("NAUTES", "From: " + sender);
Log.i("NAUTES", "Message: " + message);
// Do something using received message
}
}
};
registerReceiver(rcvIncoming, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
rcvIncoming은 SMS가 수신되었다는 브로드캐스트를 받는 리시버로 문자메시지가 수신될 때 마다 호출된다.
위의 코드를 사용혀려면 AndroidManifest.xml파일에
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
가 추가되어 있어야만 한다.
--
MyPhoneStateListener의 코드는 다음과 같다. 호출되는 경우 파라미터로 state에 변경된 상태, incomingNumber에 발신자 번호가 들어있다.
public class MyPhoneStateListener extends PhoneStateListener {
public void onCallStateChanged(int state,String incomingNumber){
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i("NAUTES", "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.i("NAUTES", "RINGING from " + incomingNumber);
break;
}
}
}
피드 구독하기:
글 (Atom)