안 드 로 이 드 문자 수신 및 발송 실현 코드

안 드 로 이 드 는 문자 메 시 지 를 받 을 때 android.provider.Telephony.SMS 를 방송 합 니 다.RECEIVED 메 시 지 는 하나의 Receiver 를 정의 해 이 메 시 지 를 들 으 면 문자 메 시 지 를 받 을 수 있다.

<receiver android:name=".smsReceiver" > 

  <intent-filter> 

    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 

  </intent-filter> 

</receiver>

intent-filter 에 우선 순 위 를 추가 할 수 있 습 니 다: 

이렇게 하면 우선 순위 가 높 기 때문에 응용 프로그램 은 시스템 보다 먼저 android.provider.Telephony.SMS 를 받 을 것 입 니 다.RECEIVED 소식.
Java 파일: 

package com.hzhi.smsReceiver;
 

import java.text.SimpleDateFormat;
import java.util.Date; 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
 

public class smsReceiver extends BroadcastReceiver { 
  @Override
  public void onReceive(Context context, Intent intent) { 
     //     
   StringBuilder strBody = new StringBuilder();
     //     
   String strTime = new String();
     //      
   StringBuilder number = new StringBuilder();
   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
   Bundle bundle = intent.getExtras(); 
   if (bundle != null) { 
     Object[] _pdus = (Object[]) bundle.get("pdus"); 
     SmsMessage[] message = new SmsMessage[_pdus.length]; 

     for (int i = 0; i < _pdus.length; i++) { 

       message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
     } 
     for (SmsMessage currentMessage : message) { 
      strBody.append(currentMessage.getDisplayMessageBody()); 
       number.append(currentMessage.getDisplayOriginatingAddress()); 
       strTime = formatter.format(new Date(currentMessage.getTimestampMillis()));

     }
     String smsBody = strBody.toString(); 
     String smsNumber = number.toString(); 
     Log.v("NUMBER=", smsNumber);
     Log.v("TIME=", strTime); 
     Log.v("BODY=", smsBody); 

     //     

     this.abortBroadcast();

    }

  }   

}

메 시 지 를 받 은 후 Intent.getExtras()방법 으로 Intent 의 Extras(Bundle 변수)를 얻 고 Bundle.get("pdus")을 사용 하여 문자 배열 을 얻 습 니 다.왜 문자 배열 이 죠?문자 메시지 내용 이 길 어 저장 할 배열 이 필요 한 경우 도 있다.배열 의 모든 요소 에 대해 문자 내용,문자 출처 번호,문자 시간 을 각각 추출 합 니 다.그 중에서 이런 요소 의 문자 출처 번호 와 문자 시간 은 모두 같 고 문자 내용 이 다 르 기 때문에 연결 되 어 완전한 문자 내용 을 구성 해 야 한다. 
마지막 으로 this.abortBroadcast()는 android.provider.Telephony.SMS 를 취소 합 니 다.RECEIVED 소식.intent-filter 에 높 은 우선 순 위 를 설정 하면 시스템 보다 먼저 android.provider.Telephony.SMS 를 받 습 니 다.RECEIVED 메시지,그리고 이 메 시 지 를 버 리 면 시스템 은 android.provider.Telephony.SMS 를 받 지 못 합 니 다.리 세 이브 드 메시지 도 문자 메시지 의 안내 음,진동 등 을 보 내지 않 는 다.우선 순위 가 설정 되 어 있 지 않 으 면 시스템 은 먼저 android.provider.Telephony.SMS 를 받 습 니 다.RECEIVED 메 시 지 는 문자 메시지 의 안내 음,진동 등 을 보 낸 뒤 애플 리 케 이 션 을 적용 해 다시 문 자 를 받는다.

//     
public void sendMsg(){
  String content = edtSend.getText().toString();
  SmsManager smsManager = SmsManager.getDefault();
  List<String> divideContents = smsManager.divideMessage(content);
  for (String text : divideContents) {  
    smsManager.sendTextMessage(smsWidget.str_number, null, text, null, null);  
  }

}

먼저 SmsManager 인 스 턴 스 를 가 져 옵 니 다.다시 divideMessage()방법 으로 문자 내용(content)을 몇 부분 으로 나 누 는 것 은 문자 내용 이 너무 길 면 보 낼 수 있 는 최대 길 이 를 초과 할 수 있 기 때문이다.이때 문자 내용 을 몇 개의 문자열 로 나 누 어야 한다.일반적인 상황 에서 내용 이 최대 길 이 를 초과 하지 않 기 때문에 문자열 이기 도 하 다.마지막 으로 모든 문자열 에 대해 sendTextMessage()방법 으로 보 냅 니 다.그 중에서 sms Widget.strnumber 는 상대방 번호 이 고 text 는 모든 문자열 입 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기