Domanda

Sto lavorando a un'applicazione che utilizza la SMS API per Android. La fine di ricezione è un'unità integrata che supporta solo SMS codificato a 7 bit e la stringa Sto inviando consiste soltanto dei simboli di questa particolare alfabeto che ti fa pensare che Android sta per inviarlo codificato come 7 bit. Ma questo non è il caso.

Quindi sto cercando un modo per specificare che cosa si codifica in uso. Vedi sotto per quello che i miei sguardi codice come oggi. Il metodo gsm7BitPackedToString trasforma un byte-array in una stringa 7 bit, cioè la stringa consiste solo di caratteri compatibili 7 bit e viene copiato dal api android interno.

private static boolean sendMessage(String tel,byte[] message,int septets) {
    SmsManager sms = SmsManager.getDefault();
    if (septets != -1) {
        String a = GsmAlphabet.gsm7BitPackedToString(message,0,septets);
        sms.sendTextMessage(tel, null, a, null, null);
        return true;
    }
    return false;
}

ho preso in considerazione le seguenti soluzioni:

  • utilizzando una sorta di metodo interno, ma nessuno di quelli ho letto di sembra esistere più.
  • L'invio di un messaggio di dati, ma questo richiede un ulteriore intestazione User-Data che la fine di ricezione anche non supporta.

Ogni aiuto è apprezzato: -)

È stato utile?

Soluzione

Bene, la soluzione non era così difficile come può sembrare. La classe GsmAlphabet che ho preso in prestito dal progetto Android ha avuto alcuni bug che codificano. Ho sostituito con l'ultimo dal repository git e ora tutto sembra funzionare come si suppone.

Lezione imparata:. Sempre doppie e triple cose di controllo che dovrebbe funzionare

Altri suggerimenti

Provare a utilizzare classe SmsMessage:

http://developer.android.com/reference/android/telephony /SmsMessage.html

Crea oggetto SmsMessage con metodo createFromPdu() e utilizzarlo per l'invio in SmsManager.

Io non l'ho provata. Buona fortuna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top