我用的是SmsManager的sendTextMessage()方法,因为我想先试试发送文字短信,不想遇到中文的乱码!
希望各位高手提点建设性意见,或者说下原理也行,难道要转码?……反正不知道了,我是新手望提点下!~

解决方案 »

  1.   

    我到安卓网看了下,有的手机还是会出现乱码,我只是纳闷,这个转码问题在任何程序语言都应该会有管理啊,难道android开发……没考虑过!谢谢楼上的回答,害我一直看sdk的帮助文档,眼睛都花了~
      

  2.   

    我在N1上测试没有乱码,其他手机倒是没试过final EditText msgContent = (EditText) textEntryView.findViewById(R.id.msg_content);
    String sms = msgContent.getText().toString();
    sendSMS(mobilephone,sms);/* 发送短信 */
        private void sendSMS(String phoneNumber,String messages){
        SmsManager sms=SmsManager.getDefault();
        ArrayList al = sms.divideMessage(messages);
        for(int i=0;i<al.size();i++){
         sms.sendTextMessage(phoneNumber, null, (String)al.get(i), null, null);
        }
        Toast.makeText(getBaseContext(), "message sent successfully", Toast.LENGTH_SHORT).show();
    }
      

  3.   

    sendDataMessage()用这个函数发短信是不会有乱码的。另外乱码和底层的网络编码有关,底层的编码有71编码和QP两种。71编码会导致短信的乱码,设置发送多条内容相同的短信。
      

  4.   

    楼上的果然很强,我查了下资料,的确跟底层有关,学习了,我最开始时也想到用sendDataMessage()去解决,就是不知道android底层默认的是哪种编码,不管怎样都学习了,谢谢了……
      

  5.   

    SmsManager 中的sendDataMessage()方法里:short destinationPort 参数怎么获取?我取null,这个方法会报错!
      

  6.   

    在BroadcastReceiver项目中的AndroidManifest.xml增加以下注册代码: <receiver android:name=".FiveReceiver">
    <intent-filter>
        <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        <data android:scheme="sms" />
        <data android:host="localhost" />
        <data android:port="2000" />
    </intent-filter>
    </receiver>就可以了
      

  7.   

    <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
    我加入这一句好像没什么用,receive不到这个action用下面这一个action
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />  的话可以收到sendtextmessage和senddatamessage传来的消息,但是senddatamessage传来消息,通过getuserdata()后和发送的相比却是不一样的,不知是怎么回事,如发送“12345”,即asc2码 49,50,51,52,53,通过getuserdata()后,能过调试只发现收到了49这个数据
      

  8.   


    android 2.1下,我使用了sendDataMessage()函数,声明了<uses-permission android:name="android.permission.SEND_SMS" />,但是发送时就会报出异常(sendTextMessage()则没有问题),在华为C8500(CDMA网络)的机器上也是catch到异常。请问这是原因呢?
    另外,sendDataMessage()发送需要指定端口,如果接收方是一个android手机,写个app在接收时设置了相同端口还可能接收到,而如果是一个普通的CDMA手机如何接收到呢?
    谢谢!
      

  9.   


    瞎讲,sendDataMessage,只是通过iei = 0x05发一条数据类的短信而已,完全偏离了正常文本短信的规范跟需求。除非接收方同样接收某个端口的iei=0x05的data短信,否则短信都可能被丢弃。
      

  10.   


    瞎讲,sendDataMessage,只是通过iei = 0x05发一条数据类的短信而已,完全偏离了正常文本短信的规范跟需求。除非接收方同样接收某个端口的iei=0x05的data短信,否则短信都可能被丢弃。
      

  11.   

    乱码就是编码和解码所用的规则的不一致导致的,sendDataMessage()这个方法是用来发送带端口的短信的
    ,只要发送和接收编解码规则不一致,乱码也会有的。 QP是电子邮件中的,短信中也有?? 求大神指教