Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    6

    Limite dei caratteri nell'invio di sms tramite applicazione Java

    Salve a tutti!

    Volevo sapere se qualcuno può darmi delle risposte in merito al mio problema che ora di seguito spiego.

    Ho realizzato un applicativo in Java che invia sms utilizzando le porte seriali tramite la libreria javax.comm disponibile sul sito della sun. Il problema che ho riscontrato è nell'effettivo invio del messaggio. La stringa che passo in input al metodo write che scrive sulla porta seriale è di lunghezza indeterminata, ma dal cellulare vengono inviati soltanto i primi settanta caratteri.

    Codice:
    codice:
    String numero, messaggio;
    char invio = 13; 
    char virgolette = 34; 
    char fine = 26; 
    OutputStream out; 
    
     ... 
    
    out.write(("AT+CMGF=1"+String.valueOf(invio)).getBytes());    
    out.write(("AT+CMGW="+String.valueOf(virgolette)+numero+String.valueOf(virgolette)+String.valueOf(invio)).getBytes());              
    for (int i=0;i<messaggio.length();i++){                    
               out.write(String.valueOf(messaggio.charAt(i)).getBytes()); 
    } 
    out.write(String.valueOf(invio).getBytes());              
    out.write(String.valueOf(endline).getBytes());
    Qualcuno sa dirmi il perché questo succede e cosa dovrei fare per risolvere il mio problema?
    Grazie mille!
    Davide

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Limite dei caratteri nell'invio di sms tramite applicazione Java

    Originariamente inviato da veddai
    Qualcuno sa dirmi il perché questo succede e cosa dovrei fare per risolvere il mio problema?
    Mah .... di problemi nel tuo codice ne vedo diversi.

    Innanzitutto trasformi le stringhe in sequenze di bytes. Quando si fanno queste conversioni String<-->byte[] bisogna sempre prestare attenzione al charset utilizzato. getBytes() usa il charset di "default" della piattaforma. Quale che sia dipende appunto .... dalla piattaforma e potrebbe anche darsi che non sia quello più appropriato per l'invio di questi dati.
    Ora ... non ho a portata di mano le specifiche o della documentazione sui comandi AT per i cellulari. Bisognerebbe verificare quale charset è possibile/più appropriato.

    Comunque invece di preoccuparti tu di fare la conversione in byte (che rende lungo e poco leggibile il codice), puoi molto più semplicemente usare un Writer. Fai il "wrap" del tuo OutputStream in un OutputStreamWriter (a cui puoi specificare anche un charset) e a quel punto puoi scrivere comodamente char e String!!!

    La seconda questione è che fai String.valueOf(invio), suppongo con l'intento di mettere nella stringa un "carriage return". Il problema è che valueOf() ritorna la rappresentazione testuale del numero, nel tuo caso ritorna "13", cioè proprio i caratteri '1' e '3'.
    E non è sicuramente quello che volevi!!
    Se vuoi mettere un carriage return, metti nella stringa semplicemente \r che è la sequenza di escape per il carriage return.

    Idem per gli altri valueOf() che hai usato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    6
    Grazie Andrea,
    ho provato però a fare le modifiche che dici tu e non accade nulla sul cell.
    col comando AT+CMGW="numero" anziché inviare il messaggio lo salva nelle bozze. Nel codice postato da me dopo l'esecuzione nelle bozze mi ritrovo il messaggio troncato dal 70esimo carattere in poi, con le modifiche che mi hai suggerito tu non accade nulla

    Provando con hyper terminal invece scrive tutto quello che voglio superando tale limite

    Altre idee?!?
    Davide

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da veddai
    Altre idee?!?
    Beh, innanzitutto puoi ripostare il codice, aggiornato. Sperando che non ci siano ancora errori (se ci sono dal punto di vista tecnico del codice, te li trovo ).

    Poi comunque non sono pratico dei comandi AT (né quelli normali né le estensioni per i cellulari). Cerco magari in giornata della documentazione in rete. Al momento non ti so dire se quei comandi sono corretti (e ammesso che sia tutto traslato in byte correttamente, cosa che già prima non lo era).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    6
    Ecco il codice! ho creato un OutputStreamWriter dall'OutputStream che mi restituisce il metodo getOutputStream della classe CommPort nel package javax.comm. Ho impostato come charset l'ISO-8859-1 avendo dato un'occhiata in giro sui vari charset per i modem. Ho fatto la prova anche con UTF-8 e US-ASCII ma niente da fare.

    codice:
                
    OutputStreamWriter writer = new OutputStreamWriter(out,"ISO-8859-1");             
    writer.write("AT+CMGF=1\r");
    writer.write("AT+CMGW=\""+numero+"\"\r");
    writer.write(messaggio+"\r");
    writer.write(endline);
    Davide

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da veddai
    codice:
                
    OutputStreamWriter writer = new OutputStreamWriter(out,"ISO-8859-1");             
    writer.write("AT+CMGF=1\r");
    writer.write("AT+CMGW=\""+numero+"\"\r");
    writer.write(messaggio+"\r");
    writer.write(endline);
    Ho trovato della documentazione (qui).

    Il primo comando mi sembra ok. Per il secondo, il +CMGW, la documentazione dice che il formato è:

    +CMGW[=address[,address_type[,message_status]]]<CR>sms_message_body<Ctrl+z>

    Quel <Ctrl+z> è il codice 26 o 0x1A.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.