본문 바로가기
WORK/HARDWARE

BlueWatch Project #1

by KANG Stroy 2011. 11. 16.
728x90
728x90

[펌] http://arsviator.blogspot.com/2010_04_01_archive.html 


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;
        }
      }
}
728x90

'WORK > HARDWARE' 카테고리의 다른 글

CAN Data Frame  (0) 2011.12.05
Human Interface Device Profile (HID)  (0) 2011.11.17
안드로이드 블루투스 프로그래밍 - BlueWatch Project #2  (0) 2011.11.16
Bluetooth  (2) 2011.11.16
파나소닉 반도체 카다로그  (0) 2011.11.04

댓글