客户OA需要发送短信的功能并且已经有了一个GPRS Modem,公司提供现成GPRS Modem发送软件,但是用公司的软件无论如何不能发送成功。
首先怀疑客户的Modem和公司发送软件不兼容,要求更换设备(反正很便宜);但是后来了获取一个信息,GPRS Modem原理基本一直,就是功能上可能有些差异,客户也只是需要发送短信,是否可以通用呢?
查找资料、咨询相关技术人员后解决问题:
GPRS Modem的端口频率可以随意修改,只要和端口的速率一致就可以。另外windows设备管理器中的com1端口的速率完全可以不指定!
调整端口频率的方式:
运行串口调试工具,执行如下命令
AT+IPR=115200 //更改串口波特率为115200
AT&W //保存设置
============通过超级终端连接短信mao, 用at指令发短信和打电话========================
1、连接短信mao
开始--〉程序--〉附件--〉通讯--〉超级终端
选择短信mao连接的com口,设置波特率(如果是手机卡发短信,需要设置为19200)。
2、输入指令发短信
在短信mao界面输入:
at
at+cmgf=1
at+cmgs=手机号
>短信内容
短信内容写完以后,按ctrl+Z键结束内容
3、用指令拨打电话
atd13500000000;
注意:上面指令中的分号,不能少。
==========附件信息=============================
附件1、2包括:
串口调试工具、常用AT命令。
附件3、4包含一个java发短信的jSMSEngine1.2.6-B1.jar稳定版,内有demo可以收短信(同步、异步)、发短信。
package test01;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import com.siemens.mp.gsm.SMS;
import com.siemens.mp.NotAllowedException;
import java.io.IOException;
import com.siemens.mp.io.*;
public class StartMIDlet extends MIDlet
{
static StartMIDlet instance;
UIMainList MainList = new UIMainList();
public StartMIDlet()
{
instance = this;
}
public void startApp() throws MIDletStateChangeException
{
try
{
Display.getDisplay(this).setCurrent(MainList);
}
catch(Exception e)
{
System.out.println("e = "+e);
}
}
public void pauseApp()
{
}
public void destroyApp(boolean UIcondition)
{
}
public static void quitApp()
{
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
}
}
class UIMainList extends List
{
private static String[] Str_List = {"A",
"B",
"C"};
static Displayable instance = null;
private Command cmExit;
private Command cmInfo;
public UIMainList() //throws Exception
{
super("测试",
List.IMPLICIT,
Str_List,
null);
setCommandListener(new CommandListener()
{
public void commandAction(Command c, Displayable d)
{
DisplayCommand(c,d);
}
}
);
cmInfo = new Command("Help", 1, 1);
cmExit = new Command("Exit", 1, 2);
jbInit();
instance = this;
temp_run();
}
public void temp_run() //throws Exception
{
Receiver rec = new Receiver();
Connection con = new Connection ("SMS: 223322332");
Alert str = new Alert("fail");
try
{
con.setListener(rec);
//把上面这句注释后程序能跑,一打开模拟器就死。为什么?
//没有这句,我就监听不到短信的到来啊
}
catch(Exception e)
{
Display.getDisplay(StartMIDlet.instance).setCurrent(str);
}
}
public void DisplayCommand(Command c,Displayable d)
{
if(c == cmExit)
{
instance = null;
StartMIDlet.quitApp();
}
else if( c == cmInfo)
{
Alert Al = new Alert("Help");
Al.setString("测试的帮助文件");
Display.getDisplay(StartMIDlet.instance).setCurrent(Al);
}
}
private void jbInit()
{
addCommand(cmInfo);
addCommand(cmExit);
}
}
class Receiver implements ConnectionListener
{
public void receiveData(byte[] data)
{
try
{
Alert str = new Alert("sms succ");
Display.getDisplay(StartMIDlet.instance).setCurrent(str);
}
catch(Exception e)
{
Alert str = new Alert("sms fail");
Display.getDisplay(StartMIDlet.instance).setCurrent(str);
}
}
}
一、在设计app时,可以使用style和themes统一各界面的外观及格式。
二、style是指一组可以应用到单个元素的格式属性。
三、theme是一组能够应用到一个app中所有界面的格式属性。
四、style和themes属于资源。android提供了一组默认的实现让你去使用。你也可以定义自已的style和theme资源。
五、创建style的步骤:在res/values下建立styles.xml文件。在styles.xml中增加根节点<resources>。根节点下可以放置多个<style>节点。<style>节点中可以放name和parent属性。name属性作为style的标志,被其它代码引用,而parnet属性表示当前style继承哪些style。style可以有多个<item>节点,item节点用于存放具体的属性值。最后在view中用style节点进行引用。
六、themce的创建和style一样。设置的时候在AndroidManifest.xml的application或activity节点中的android:theme属性中进行引用。
七、特殊符号@与?。@表示对当前应用的某资源的引用。而?表示对当前的属性进行引用。
八、当你喜欢某种默认样式,另外还需要作一些小调整时,你可以在style的parent属性在引用默认样式,然后在style节点下增加需要修改的item。
九、除了在laout及AndroidMenifest.xml中引用样式外,还可以以编程的方式用setTheme()方法设置theme。但一定要确保语句在setContentView和inflate之前。