pc(电脑)用java通过adb操作android手机发短信及中文乱码解决
2014-01-21 10:21
696 查看
最近想用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)
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)
相关文章推荐
- PHP通过ADODB操作ACCESS数据库,中文乱码的解决办法
- Android adb logcat cmd 中文乱码 ----- bat批处理文件不能执行 -- 问题的解决办法
- PC端通过adb命令远程连接手机的相关操作
- Android手机可以通过adb执行按键操作
- Java_通过PreparedStatement往MySql数据库插入中文出现'?'乱码问题解决;
- Android_利用 adb 命令把电脑和 Android 手机通过 WIFI 进行连接,从此安装应用不需要数据线
- Android Studio部署apk到手机后手机显示中文乱码解决方法
- 通过Java向Mysql写中文数据出现乱码解决方式
- Android学习笔记:adb 与 adb shell操作 以及中文乱码解决
- Android 与 PC网络通信之中文乱码问题解决
- 关于Android与pc通信时中文乱码的分析和解决
- java freemarker 通过ftl模板文件导出word文件发现在有中文地方出现在乱码,打开word文件提示xml错误解决办法
- Android 与 PC网络通信之中文乱码问题解决
- Csharp与Java的Android开发中【关于如何解决Adb无法连接的解决方案】usb无法连接到手机
- Java与C之间通过JNI传递中文字符乱码解决
- Java中按照行读取和写入文件 日志常用操作 解决中文乱码问题
- JAVA通过JDBC连接Mysql获取中文输出乱码解决方法
- Android 代码中文字在手机上显示乱码问题解决方法
- 电脑不能通过adb 连接手机的解决办法
- java 输入输出流和File简单解析(附android中文乱码问题解决)