я нашел свободный исходный проект, чтобы отправить смс с использованием Java комм: http://code.google.com/p/find-ur-pal/source/browse/src/?r=21Как читать sms из gsm с помощью java comm?
Функция отправки смс выглядит следующим образом:
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+"***");
}
}
AT команды посылают в соответствии со спецификациями. И он работает отлично, но теперь я прочитал смс из Inbox. У меня написать подобную функцию, как это:
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() ;
}
На шаге 1 я посылаю команду ATZ, и я получил ответ ОК, а затем команду ath0 и ответ OK, а затем команду на + CMGL = \ «ALL \» и снова ответ OK, но где мои сообщения? Я думал, что последний ответ (getIncommingString) должен содержать сообщения, прочитанные из папки «Входящие».
Я знаю, что это SMSLib и другие библиотеки. Но для использования этих библиотек я должен добавить много других библиотек (для ведения журнала). Я хочу иметь простое приложение для отправки и получения смс.
Благодаря
Текстовый режим, я скопировал ATZ и ATH0 из образца проекта из Google. – Robert
Я меняю код, и теперь команда AT + CMGL отправляется, и ответ в порядке, тогда я посылаю AT + CMGR = 1 и ответ тоже в порядке, но где список индексов сообщений? – Robert
Я заметил, что мои смс находятся на вкладке «Местный», а на вкладке «SIM» нет никаких SMS-сообщений, поэтому, когда я запускаю свое приложение, он считывает смс с SIM-карты, поэтому я думаю, что это причина, по которой у меня все еще есть 0 сообщений, когда Я использую команду cmgl. Когда sms приходят в gsm, где он хранится? Как я могу читать смс с локальной вкладки? (не сохраняется на SIM-карте)? – Robert