나는 자바 통신을 사용하여 SMS를 보낼 수없는 소스 프로젝트를 발견 http://code.google.com/p/find-ur-pal/source/browse/src/?r=21자바 통신을 사용하여 GSM에서 SMS를 읽는 방법?
기능은 SMS를 보내는 것은 다음과 같습니다 명령 AT
public void run(){
boolean timeOut=false;
long startTime=(new Date()).getTime();
while ((step <7) && (!timeOut)){
// log(""+((new Date()).getTime() - startTime);
//check where we are in specified delay
timeOut=((new Date()).getTime() - startTime)>delay;
//if atz does not work, type to send cntrlZ and retry, in case a message was stuck
if (timeOut && (step==1)) {
step=-1;
mySerial.send( ""+cntrlZ);
}
//read incoming string
String result= mySerial.getIncommingString() ;
// log ("<- "+result+"\n--------");
int expectedResult=-1;
try{
//log ("Step:"+step);
switch (step){
case 0:
mySerial.send("atz");
delay=LONG;
startTime=(new Date()).getTime();
break;
case 1:
delay=STANDARD;
mySerial.send("ath0");
startTime=(new Date()).getTime();
break;
case 2:
expectedResult=result.indexOf("OK");
//log ("received ok ="+expectedResult);
if (expectedResult>-1){
mySerial.send("at+cmgf=1");
startTime=(new Date()).getTime();
}else{
step=step-1;
}
break;
case 3:
expectedResult=result.indexOf("OK");
// log ("received ok ="+expectedResult);
if (expectedResult>-1){
mySerial.send("at+csca=\""+csca+"\"");
startTime=(new Date()).getTime();
}else{
step=step-1;
}
break;
case 4:
expectedResult=result.indexOf("OK");
// log ("received ok ="+expectedResult);
if (expectedResult>-1){
mySerial.send("at+cmgs=\""+recipient+"\"");
startTime=(new Date()).getTime();
}else{
step=step-1;
}
break;
case 5:
expectedResult=result.indexOf(">");
// log ("received ok ="+expectedResult);
if (expectedResult>-1){
mySerial.send(message+cntrlZ);
startTime=(new Date()).getTime();
}else{
step=step-1;
}
delay=VERYLONG;//waitning for message ack
break;
case 6:
expectedResult=result.indexOf("OK");
//read message number
if (expectedResult>-1){
int n=result.indexOf("CMGS:");
result=result.substring(n+5);
n=result.indexOf("\n");
status=0;
messageNo=Long.parseLong(result.substring(0,n).trim());
log ("sent message no:"+messageNo);
}else{
step=step-1;
}
break;
}
step=step+1;
aThread.sleep(100);
}catch (Exception e){
e.printStackTrace();
}
}
mySerial.closeConnection() ;
//if timed out set status
if (timeOut) {
status=-2;
log("*** time out at step "+step+"***");
}
}
은 사양에 따라 전송된다. 그리고 그것은 완벽하게 작동하지만 지금은 Inbox에서 SMS를 읽었습니다. 응답 다시 확인을 1 단계에서
public void receiveMessage() throws Exception
{
int expectedResult = 0;
SerialParameters params = defaultParameters;
mySerial =new SerialConnection (params);
mySerial.openConnection();
// step 1
mySerial.send("atz");
delay=LONG;
Thread.sleep(100);
//aThread.sleep(100);
String result= mySerial.getIncommingString() ;
// step 2
delay=STANDARD;
mySerial.send("ath0");
Thread.sleep(100);
// step 3
result= mySerial.getIncommingString() ;
expectedResult=result.indexOf("OK");
//log ("received ok ="+expectedResult);
if (expectedResult>-1){
mySerial.send("at+cmgf=1");
//startTime=(new Date()).getTime();
}
// step 4
result= mySerial.getIncommingString() ;
expectedResult=result.indexOf("OK");
//log ("received ok ="+expectedResult);
if (expectedResult>-1){
//mySerial.send("at+cmgl=\"ALL\"");
mySerial.send("at+cmgr=1");
//startTime=(new Date()).getTime();
}
Thread.sleep(100);
result= mySerial.getIncommingString() ;
}
내가 ATZ 명령을 보내고 나는 응답이 OK 다음 ATH0 및 응답 확인을 명령했고, 다음 명령 + CMGL =에 "ALL \"\과 :이 같은 유사한 기능을 쓰기가 그러나 내 메시지는 어디에 있습니까? 내 생각에 그때 마지막 응답 (getIncommingString)받은 편지함에서 읽은 메시지를 포함해야합니다.
저는 SMSLib 및 기타 라이브러리를 알고 있습니다. 하지만이 라이브러리를 사용하기 위해서는 (로깅을 위해) 다른 많은 라이브러리를 추가해야합니다. 나는 SMS를 보내고받는 간단한 응용 프로그램을 갖고 싶다.
감사
텍스트 모드에서 Google의 샘플 프로젝트에서 ATZ 및 ATH0을 복사했습니다. – Robert
코드를 변경하고 이제 AT + CMGL 명령을 보내고 응답을 확인한 다음 AT + CMGR = 1을 보내고 응답도 OK이지만 메시지 인덱스 목록은 어디에 있습니까? – Robert
내 SMS가 로컬 탭에 있고 SMS 탭에 SMS가 없으므로 내 응용 프로그램을 실행할 때 SIM 카드에서 SMS를 읽음으로써 이것이 여전히 0 메시지를 가지고있는 이유라고 생각합니다. 나는 cmgl 명령을 사용합니다. SMS가 저장되는 gsm에 도착하면? 로컬 탭에서 SMS를 읽으려면 어떻게해야합니까? (SIM 카드에 저장되지 않음)? – Robert