Basically I have a working application that sends an SMS after receiving an SMS.
Everything works fine, except when the SMS text to send has "special chars", ie "é,à,í,ç", etc.
I've tried many things including charset conversion but I simply can't make it work... the msgText always comes back with charset encoding problems.
Here's the part where the message is sent:
if (msgText.length() > 160) {
ArrayList msgTexts = sm.divideMessage(msgText);
sm.sendMultipartTextMessage(PhoneNumber, null, msgTexts, null, null);
} else {
try {
sm.sendTextMessage(PhoneNumber, null, msgText, null, null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
Here's the charset conversion function I tried (but didn't help), that I applied on msgText:
public static String formatCharset(String txtInicial) {
//-- Please notice this is just for reference, I tried every charset from/to conversion possibility. Even stupid ones and nothing helped.
/*try {//-- Seems simpler, it should do the same as below, but didn't help
msgText = new String(msgText.getBytes("UTF-8"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}*/
Charset charsetOrigem = Charset.forName("UTF-8");
CharsetEncoder encoderOrigem = charsetOrigem.newEncoder();
Charset charsetDestino = Charset.forName("ISO-8859-1");
CharsetDecoder decoderDestino = charsetDestino.newDecoder();
String txtFinal = "";
try {
ByteBuffer bbuf = encoderOrigem.encode(CharBuffer.wrap( txtInicial ));
CharBuffer cbuf = decoderDestino.decode(bbuf);
txtFinal = cbuf.toString();
} catch (CharacterCodingException e) {
e.printStackTrace();
}
if (txtFinal.length() == 0) txtFinal = txtInicial;
return txtFinal;
}
Near desperation I even tried the solution for unicode messaging in here (didn't help as well):
http://since2006.com/blog/android-send-unicode-message/
Anyway, here's the (cleaned up - package is com.THE.APPLICATION, main activity is MAINACT) LogCat for when it crashes (when trying to send the message, after receiving one):
WARN/dalvikvm(28218): threadid=1: thread exiting with uncaught exception (group=0x4001d7f0) ERROR/AndroidRuntime(28218): FATAL EXCEPTION: main ERROR/AndroidRuntime(28218): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } in com.THE.APPLICATION.SMSReceiver@44acd880 ERROR/AndroidRuntime(28218): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905) ERROR/AndroidRuntime(28218): at android.os.Handler.handleCallback(Handler.java:587) ERROR/AndroidRuntime(28218): at android.os.Handler.dispatchMessage(Handler.java:92) ERROR/AndroidRuntime(28218): at android.os.Looper.loop(Looper.java:123) ERROR/AndroidRuntime(28218): at android.app.ActivityThread.main(ActivityThread.java:4627) ERROR/AndroidRuntime(28218): at java.lang.reflect.Method.invokeNative(Native Method) ERROR/AndroidRuntime(28218): at java.lang.reflect.Method.invoke(Method.java:521) ERROR/AndroidRuntime(28218): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) ERROR/AndroidRuntime(28218): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) ERROR/AndroidRuntime(28218): at dalvik.system.NativeStart.main(Native Method) ERROR/AndroidRuntime(28218): Caused by: java.lang.NullPointerException ERROR/AndroidRuntime(28218): at android.os.Parcel.readException(Parcel.java:1253) ERROR/AndroidRuntime(28218): at android.os.Parcel.readException(Parcel.java:1235) ERROR/AndroidRuntime(28218): at com.android.internal.telephony.ISms$Stub$Proxy.sendText(ISms.java:369) ERROR/AndroidRuntime(28218): at android.telephony.SmsManager.sendTextMessage(SmsManager.java:87) ERROR/AndroidRuntime(28218): at com.THE.APPLICATION.MAINACT.sendMessage(MAINACT.java:214) ERROR/AndroidRuntime(28218): at com.THE.APPLICATION.SMSReceiver.onReceive(SMSReceiver.java:24) ERROR/AndroidRuntime(28218): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892) ERROR/AndroidRuntime(28218): ... 9 more
Sample of message text to send with issues:
VERBOSE/debug_tag(28218): msgText is: possÃvel.
So, it reads possÃvel when it should be possível
Please some enlightened soul help me out. He/She'll have a special place in my heart! :)
Edit: If the special place in my heart doesn't cut it, I'm willing to pay a few bucks for a working solution...
I am using this command line:
Html.fromHtml(new String(myString.getBytes("UTF-8"))).toString();
and my SMS message looks perfect.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With