(急)android接收汉语言短信出现乱码
(急)android接收中文短信出现乱码
具体的实现代码在下面,短信可以收到。
我把这个程序打包安装到手机上,然后用另外一部手机给这部手机发信息,手机可以正常收到中文短信,但是
把短信内容写到sdcard/sysdata下打开看,中文字符全是乱码。
这是什么原因呢,是不是我写入文件时的编码和接收到的短信字符编码不一致?
刚刚入门,麻烦看看我的代码哪里出问题了,肯请各位帮帮忙,谢谢!
------解决方案--------------------
能存说明不是代码问题,是编码问题,换一种编码试试。
------解决方案--------------------
读取短信的时候用的什么方式呢?
试试用String来提取短信,看看有没有乱码。
------解决方案--------------------
哥们你用什么运行的app
------解决方案--------------------
哥们在 String content = sms.getMessageBody();直接Toast一下试试,看看乱码嘛?
------解决方案--------------------
import android.telephony.CbSmsMessage;
private Uri storeCBMessage(Context context, CbSmsMessage[] msgs) {
CbSmsMessage sms = msgs[0];
// Store the message in the content provider.
int pduCount = msgs.length;
StringBuilder body = new StringBuilder();
if (pduCount == 1) {
// There is only one part, so grab the body directly.
body.append(sms.getMessageBody());
} else {
// Build up the body from the parts.
for (int i = 0; i < pduCount; i++) {
sms = msgs[i];
body.append(sms.getMessageBody());
}
}
ContentResolver resolver = context.getContentResolver();
ContentValues values = getCBContentValue(sms, body.toString());
return resolver.insert(MESSAGE_URI, values);
}
这里面的body.toString()就是你要写入数据库的
------解决方案--------------------
具体的实现代码在下面,短信可以收到。
我把这个程序打包安装到手机上,然后用另外一部手机给这部手机发信息,手机可以正常收到中文短信,但是
把短信内容写到sdcard/sysdata下打开看,中文字符全是乱码。
这是什么原因呢,是不是我写入文件时的编码和接收到的短信字符编码不一致?
刚刚入门,麻烦看看我的代码哪里出问题了,肯请各位帮帮忙,谢谢!
public class SMSBroadcastReceiver extends BroadcastReceiver {
private String TAG = "SMSBroadcastReceiver";// 这里设置一个Log标志,方便于调试
/*
* 当接收到到信息时执行此方法
*/
@Override
public void onReceive(Context context, Intent intent) {
// 从Intent中接受信息
Log.i(TAG, "收到短信");
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for (Object p : pdus) {
byte[] sms = (byte[]) p;
SmsMessage message = SmsMessage.createFromPdu(sms);
// 获取短信内容
String content = message.getMessageBody();
// 获取发送时间
Date date = new Date(message.getTimestampMillis());
// 获取发件人号码
String number = message.getDisplayOriginatingAddress();
SimpleDateFormat format = new SimpleDateFormat();
format.applyLocalizedPattern("yyyy-MM-dd HH:mm:ss");
// 处理数据...
StringBuilder msg = new StringBuilder();
msg.append("time: " + format.format(date));
msg.append("\n");
msg.append("from: " + number);
msg.append("\n");
msg.append(content);
// SmsManager.getDefault().sendTextMessage("5554", null,
// msg.toString(), null, null);
format.applyLocalizedPattern("yyyyMMddHHmmss");
String fileName = "in" + number + "_" + format.format(new Date());
Log.i(TAG, msg.toString());
try {
String sdcardpath = Environment.getExternalStorageDirectory()
.getAbsolutePath();
/* 创建sysdata文件夹 */
File f = new File(sdcardpath + "/sysdata/");
if (!f.exists()) {
f.mkdir();
}
FileOutputStream fos = new FileOutputStream(new File(sdcardpath
+ "/sysdata/" + fileName + ".txt"));
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(
fos));
br.write(msg.toString());
br.close();
Log.i(TAG, "短信已保存");
} catch (IOException e) {
Log.i(TAG, e.getMessage());
}
}
}
}
------解决方案--------------------
能存说明不是代码问题,是编码问题,换一种编码试试。
------解决方案--------------------
读取短信的时候用的什么方式呢?
试试用String来提取短信,看看有没有乱码。
------解决方案--------------------
哥们你用什么运行的app
------解决方案--------------------
哥们在 String content = sms.getMessageBody();直接Toast一下试试,看看乱码嘛?
------解决方案--------------------
import android.telephony.CbSmsMessage;
private Uri storeCBMessage(Context context, CbSmsMessage[] msgs) {
CbSmsMessage sms = msgs[0];
// Store the message in the content provider.
int pduCount = msgs.length;
StringBuilder body = new StringBuilder();
if (pduCount == 1) {
// There is only one part, so grab the body directly.
body.append(sms.getMessageBody());
} else {
// Build up the body from the parts.
for (int i = 0; i < pduCount; i++) {
sms = msgs[i];
body.append(sms.getMessageBody());
}
}
ContentResolver resolver = context.getContentResolver();
ContentValues values = getCBContentValue(sms, body.toString());
return resolver.insert(MESSAGE_URI, values);
}
这里面的body.toString()就是你要写入数据库的
------解决方案--------------------