最近想用java调用android手机的短信功能。已开始用一下方法实现:

adb -s emulator-5554 shell am start -a android.intent.action.SENDTO -d sms:5556 --es sms_body "hello"

adb -s emulator-5554 shell input keyevent 22   //切换焦点到发送按钮

adb -s emulator-5554 shell input keyevent 66  //单击

但是这种方法不能发送中文。

于是就想到把中文转换为Unicode编码,但默认的短信发送器不能把编码转换为中文。所以就想到自己写一个短信发送器,先把编码转为中文在发送出去。

因此代码如下:

1、短信发送器:

public class MainActivity extends Activity {

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Intent intent=this.getIntent();
        
        String mess=intent.getStringExtra("mes");  //接受信息内容编码
        if(mess!=null){
        String temp=Html.fromHtml(mess).toString();
       
        char[] convtBuf=new char[2];
        temp=loadConvert(mess.toCharArray(),0,mess.length(),convtBuf);//编码转换为中文
        
        String num=intent.getStringExtra("number");
        sendMess(temp,num);
        }
      
        this.finish();
        
    }
    
    //发送短信代码
    private int sendMess(String str,String number){
    SmsManager manager= SmsManager.getDefault();
    ArrayList<String> texts=manager.divideMessage(str);
    for(String text:texts){
    manager.sendTextMessage(number,null,text,null,null);
    }
   
    return 0;
   
    }
    
    //编码转换代码
        private static String loadConvert (char[] in, int off, int len, char[] convtBuf) {
            if (convtBuf.length < len) {
                int newLen = len * 2;
                if (newLen < 0) {
                newLen = Integer.MAX_VALUE;
            } 
            convtBuf = new char[newLen];
            }
            char aChar;
            char[] out = convtBuf; 
            int outLen = 0;
            int end = off + len;
     
            while (off < end) {
                aChar = in[off++];
                if (aChar == '\\') {
                    aChar = in[off++];   
                    if(aChar == 'u') {
                        // Read the xxxx
                        int value=0;
                for (int i=0; i<4; i++) {
                    aChar = in[off++];  
                    switch (aChar) {
                      case '0': case '1': case '2': case '3': case '4':
                      case '5': case '6': case '7': case '8': case '9':
                         value = (value << 4) + aChar - '0';
                     break;
                  case 'a': case 'b': case 'c':
                              case 'd': case 'e': case 'f':
                     value = (value << 4) + 10 + aChar - 'a';
                     break;
                  case 'A': case 'B': case 'C':
                              case 'D': case 'E': case 'F':
                     value = (value << 4) + 10 + aChar - 'A';
                     break;
                  default:
                                  throw new IllegalArgumentException(
                                               "Malformed \\uxxxx encoding.");
                            }
                         }
                        out[outLen++] = (char)value;
                    } else {
                        if (aChar == 't') aChar = '\t'; 
                        else if (aChar == 'r') aChar = '\r';
                        else if (aChar == 'n') aChar = '\n';
                        else if (aChar == 'f') aChar = '\f'; 
                        out[outLen++] = aChar;
                    }
                } else {
                out[outLen++] = (char)aChar;
                }
            }
            return new String (out, 0, outLen);
        }
        
}

2、adb命令

adb shell am start -n com.huasoft.send/com.huasoft.send.MainActivity --es mes "\u4f60\u597d" --es number "13323825958";

3、java代码

Runtime  rt=Runtime.getRuntime();
String temp="adb shell am start -n com.huasoft.send/com.huasoft.send.MainActivity --es mes \"\u4f60\u597d\" --es number \"13323825958\"";
rt.exec(new String(temp.getBytes(),"GBK"));//windows下要有此转换,否则会乱码

简单说明一下,–ei表示参数类型为整型(extra integer),–es表示参数的类型为字符串(extra string)

pc(电脑)用java通过adb操作android手机发短信及中文乱码解决相关推荐

  1. java向硬件发送信息_如何用电脑控制手机发短信 用JAVA 通过USB口

    http://download.csdn.net/source/134522 可以去这里下载一个研究研究 ----------------------------------------------- ...

  2. Android实现发短信,打电话

    最近做的这个HTML5项目中有2个调用本地的打电话,发短信功能,之后就去在网上找实现方式下面就是实现方式. 首先想到就是权限问题所以在AndroidManifest中添加权限 <?xml ver ...

  3. 计算机发布信息的方法,介绍两种用电脑给手机发短信的方法

    发现还有很多电脑的新手朋友,还不知道原来电脑是可以给手机发短信的,下面将针对"如何用电脑给手机发短信"这一主题给大家详细讲解下怎么利用电脑给手机发短信的方法,感谢兴趣的朋友,可以认 ...

  4. Android 手机发送短信

    参照网上的例子,做了一个手机发送短信的app. 有两种发送方法:第一种方法测试没有信息的发送记录,第二种调用的sms的Activity还要自行操作. 首先是xml布局文件代码: <LinearL ...

  5. Android模拟发短信,[转载]Android模拟器中模拟GPS、打电话、发短信

    首先,当然要打开模拟器 然后,连接模拟器 C:UsersBillGates>telnet localhost 5554 Android Console: type 'help' for a li ...

  6. android应用发短信

    首选在AndroidManifest.xml 申请权限 <uses-permission android:name="android.permission.SEND_SMS" ...

  7. java给手机发短信_java给手机发送短信验证码

    最近在做项目,分配到一个使用手机验证码实现快速登录的需求,好了No B B 了直接进入主题. 首先进入官网(http://www.miaodiyun.com/) 进行注册登录,这个不用教吧. 注册登录 ...

  8. Android 双卡双待手机解析短信异常分析及解决

    如有转载,请声明出处: 时之沙:http://blog.csdn.net/t12x3456 开发中,难免会遇到各种各样的适配问题,尤其是经过深度修改定制过的系统,有的无论是软硬件上都有很大的区别,这里 ...

  9. JAVA飞信_java调用飞信接口发短信 - 贪吃蛇学院-专业IT技术平台

    java调用飞信接口发短信,看到挺好的,有利于大家做毕业设计加亮点,就发给大家了(新人发帖,不会发多个文件名,测试类就放这了) 需要这3个jar包: commons-codec-1.4.jar com ...

最新文章

  1. ubuntu修改主机名后无法解析主机
  2. wince5使用access数据库_关于wince系统支持什么数据库的阿里云论坛用户知识和技术交流...
  3. 安装Pod时提示ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod...
  4. 【天池直播--预告】美女程序猿带你用大数据吃鸡(有内涵-这是一个有大奖的活动)...
  5. 算法提高课-搜索-双端队列广搜-AcWing 175. 电路维修:deque、bfs、有点难
  6. CDS view注解解析 - @Environment.systemField
  7. 设置模态框开始是隐藏状态_有限元仿真分析误差来源之材料参数设置,小心为妙!...
  8. php在类定义一个我静态变量,php中静态类与静态变量用法的区别分析_PHP教程
  9. Func和Action的介绍及其用法
  10. 2699元起!格力首款5G手机悄然上架:骁龙765G处理器
  11. 如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景
  12. 「JXOI2018」游戏
  13. matlab低通滤波器库函数代码_【转】Matlab中模拟低通滤波器的函数
  14. Altium Designer
  15. phP imageMagic抠图,ps抠图技巧汇总
  16. 辞职日记 记录31岁的程序员跳槽心态
  17. 软件研发相关国家标准汇总
  18. matlab在电磁波中的应用,MATLAB在电磁波与电磁场课程教学中的应用
  19. 个人微信机器人,微信开发API
  20. 柔性电子,常用材料总结

热门文章

  1. vue 循环出来的三个标签加不同的颜色
  2. 金字塔思维,所有厉害的人都在用!
  3. 视频播放器的新选择——Mplayer WW编译版
  4. java.lang.IllegalStateException: Optional int parameter 'ww_id' is present but cannot be translated
  5. visudo限制普通用户的特权操作
  6. 7590 xps 拆机_全新戴尔XPS 15内部做工如何?两万元级戴尔XPS 15拆机图解评测
  7. Unity接高德SDK(Android)
  8. js数字和字符串转2进制、4进制、7进制、8进制、10进制、12进制、16进制
  9. 2023视觉3D量产元年?最新视觉3D检测综述一览前沿进展!
  10. 一种Δ-∑模数转换器中梳状滤波器的设计