当前位置:  编程技术>移动开发
本页文章导读:
    ▪MOTO MC3190盘点机经验        MOTO MC3190盘点机心得最近做了一个使用MOTO mc3190 二维码机器的客户,对这个机器简单说一下。 1,名牌就是名牌,对得起价格,做工精细,细节完美。美中不足,我拿到机器,居然是 英文OS,.........
    ▪ java实现 MISC 短信业务定购        java实现 MISC 短信业务订购最近在做这个玩意、其中碰到的最大的问题是联络的问题,还有一个就是资料匮乏的问题。遇到问题了问移动的经理,他说他不清楚、问卓望的人他说他不是搞开发.........
    ▪ 在前台运作Service       在前台运行Service一个前台的service是被用户强烈关注的从而不会在内存低时被系统杀死.前台service必须在状态栏上提供一个通知,这个通知被放在"正在进行"区域中,这表示这个通知不能.........

[1]MOTO MC3190盘点机经验
    来源: 互联网  发布时间: 2014-02-18
MOTO MC3190盘点机心得

最近做了一个使用MOTO mc3190 二维码机器的客户,对这个机器简单说一下。

1,名牌就是名牌,对得起价格,做工精细,细节完美。美中不足,我拿到机器,居然是 英文OS,呵呵,订货的时候我也没说明。直接就订了。

      不过,发过来一个中文OS,自己update一下就好了。这个没什么难度,只是需要仔细看清说明,运行对应方式的快捷方式。


2,关于EMDK 开发文档和SDK以及demo示范,是我目前见过,最完整,最有条理的,没有一点拖泥带水的感觉,美中不足全是“鸟语”,看得不太习惯。


3,发现一个问题,同屏软件mymobiler 居然连接不上MC3190S 呵呵,懒得去研究,也懒得去建模拟器,直接机器上调试,工程进度要紧。


4,我将我的工程删减后,形成一个读码演示程序,公开整个工程和源代码,里头还有注解。需要的可以下载:

http://download.csdn.net/detail/zyai001/6329979


5,几点用法总结一下

1. 冷启动:关机状态下: 1 + 9 + power  警告:会格式化数据,恢复到出厂值,重新校正触控笔。
   热启动:部分资料介绍为:7 + 9 +power,但是我手里这个机器不是,直接长按电源就关机了,在按一下就热启动了。
   另外,我手里的机器,有个机器自带的 warmboot 的程序,呵呵,一点就热启动重启了。


2. 机器充电:显示剩余10%左右电量充电,不要完全耗完电池的电。一般机子显示充满电之后,
大概再充一个小时的电,电池就可以达到完全饱和。


3. 关于MC3190 冷启动自动恢复
   在 Application 目录下建立  *.cpy 和 *.reg 两个后缀名文件
 
  *.cpy: 机器冷启动后,会自动按照这个文件指定格式内容,复制文件。
请严格按照如下格式建立:
\Application\备份\ xxxx.cab > \xxxxxx\xxxx.cab


  *.reg: 机器在执行完文件复制任务后,会自动导入这个注册表,然后运行其中指定的程序用的最多的就是SQLCE等恢复。
请参照如下格式和注解:
;-------------------------------- 
; FILENAME: Setup.Reg 
; Company: ZhengZhou ZhiMa Computer S&T CO.,LTD 
; Web: www.0371pos.net  QQ:1157292096 
;--------------------------------


; For 
[HKEY_CURRENT_USER\Software\Symbol\Startup\Programs\Prog10] 
"Name"="\windows\wceload.exe" 
"Command"="/noaskdest \windows\sqlce.wce5.armv4i.CAB"
"Continue"=dword:0 
"ColdBootOnly"=dword:1


; For 
[HKEY_CURRENT_USER\Software\Symbol\Startup\Programs\Prog11] 
"Name"="\windows\wceload.exe" 
"Command"="/noaskdest \windows\QsMent6.cab" 
"Continue"=dword:0 
"ColdBootOnly"=dword:1


;注解
;注册表键值
;运行程序名称
;程序运行参数  /noaskdest 不询问,自动静默安装。
;
;
;备注,经我亲自测试 /delete 0 这个参数不可靠,如果安装成功 *.cab 不会删除,安装失败,依旧会删除。
;所以,最好的办法就是,自动复制一份,然后运行。
;另,自动建立桌面图标,我用cpy方法在MC3190s怎么实验都不成功,其他品牌都成功过。
;最后只要将我的程序制作一个 CAB 安装包。


    
[2] java实现 MISC 短信业务定购
    来源: 互联网  发布时间: 2014-02-18
java实现 MISC 短信业务订购

最近在做这个玩意、其中碰到的最大的问题是联络的问题,还有一个就是资料匮乏的问题。遇到问题了问移动的经理,他说他不清楚、问卓望的人他说他不是搞开发他不知道!

好了、公司申请了短信订购业务过后,我们就会得到发送订购报文的地址跟业务代码,企业代码这些报文信息,具体报文如下:

<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
    <TransactionID xmlns="http://www.monternet.com/dsmp/schemas/">00240301659556</TransactionID>  ------该消息编号 
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<SyncOrderRelationReq xmlns="http://www.monternet.com/dsmp/schemas/"><Version>1.5.0</Version>
<MsgType>SyncOrderRelationReq</MsgType>
<Send_Address>
<DeviceType>0</DeviceType>
<DeviceID>0028</DeviceID>
</Send_Address>
<Dest_Address>
<DeviceType>400</DeviceType>
<DeviceID>0</DeviceID>
</Dest_Address>
<FeeUser_ID>
<UserIDType>1</UserIDType>
<MSISDN>13885078893</MSISDN>           ----------------------手机号码
<PseudoCode></PseudoCode>
</FeeUser_ID>
<DestUser_ID>
<UserIDType>1</UserIDType>
<MSISDN>13885078893</MSISDN>           ----------------------手机号码
<PseudoCode></PseudoCode>
</DestUser_ID>
<LinkID>SP</LinkID>
<ActionID>1</ActionID>
<ActionReasonID>1</ActionReasonID>
<SPID>924703</SPID>          			  ----------------------企业代码
<SPServiceID>-PG</SPServiceID>         	  ----------------------业务代码
<AccessMode>3</AccessMode>
<FeatureStr>UXI=</FeatureStr>
</SyncOrderRelationReq>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
上面的是订购的xml内容,我们需要将上面的手机号码,企业代码,业务代码,消息编号(如果你不考虑接收取消订购的消息的话可以不管它)替换掉,下面是我写的一个订购测试类:

package com.bx.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

/**
 * 移动订购业务包
 * @author admin_Hzw
 *
 */
public class CMMISC {

	/**
	 * 反向订购请求包
	 * @return
	 */
	public static String getRequest(String phone,String msgId){
		StringBuffer sendStr = new StringBuffer(); 
		sendStr.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"+  
				"<SOAP-ENV:Envelope "+
				"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" "+
				"xmlns:SOAP-ENC=\"http://schemas .xmlsoap.org/soap/encoding/\" "+
				"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+
				"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "+
				"SOAP-ENV:encodinghttp://schemas.xmlsoap.org/soap/encoding/\" "+
		"xmlns=\"http://www.monternet.com/dsmp/schemas/\">"); 
		sendStr.append("<SOAP-ENV:Header> "+
				"<TransactionID xmlns=\"http://www.monternet.com/dsmp/schemas/\" "+
				"xsi:type=\"xsd:string\">"+msgId+"</TransactionID>  "+
		" </SOAP-ENV:Header>");  
		sendStr.append("<SOAP-ENV:Body>"); 
		sendStr.append("<SubscribeServiceReq xmlns=\"http://www.monternet.com/dsmp/schemas/\">");   
		sendStr.append("<Version>1.5.0</Version>"); 
		sendStr.append("<MsgType>SubscribeServiceReq</MsgType>");   
		sendStr.append("<Send_Address>");   
		sendStr.append("<DeviceType>400</DeviceType>");  
		sendStr.append("<DeviceID>924403</DeviceID>"); 
		sendStr.append("</Send_Address>");   
		sendStr.append("<Dest_Address>"); 
		sendStr.append("<DeviceType>0</DeviceType>");   
		sendStr.append("<DeviceID>0028</DeviceID>");   
		sendStr.append("</Dest_Address>");  
		sendStr.append("<FeeUser_ID>");   
		sendStr.append("<UserIDType>1</UserIDType>"); 
		sendStr.append("<MSISDN>"+phone+"</MSISDN>"); 
		sendStr.append("<PseudoCode />");    
		sendStr.append("</FeeUser_ID>"); 
		sendStr.append("<DestUser_ID>");   
		sendStr.append("<UserIDType>1</UserIDType>");   
		sendStr.append("<MSISDN>"+phone+"</MSISDN>");  
		sendStr.append("<PseudoCode />");   
		sendStr.append("</DestUser_ID>"); 
		sendStr.append("<Service_ID>"); 
		sendStr.append("<ServiceIDType>1</ServiceIDType>");   
		sendStr.append("<SPID>企业代码</SPID>"); 
		sendStr.append("<SPServiceID>业务代码</SPServiceID>");   
		sendStr.append("<AccessNo />");   
		sendStr.append("<FeatureStr />");  
		sendStr.append("</Service_ID>");     
		sendStr.append("<FeatureStr />");  
		sendStr.append("</SubscribeServiceReq>");
		sendStr.append("</SOAP-ENV:Body>");
		sendStr.append("</SOAP-ENV:Envelope>");
		return sendStr.toString();
	}

	/**
	 * 模拟返回包
	 * @return
	 */
	public static String getResult(){
		StringBuffer r = new StringBuffer(); 
		r.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append(
		"<SOAP-ENV:Envelope").append(
		" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"").append(
		" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\"").append(
		" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"").append(
		" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">").append(
		"<SOAP-ENV:Header>").append(
		"<TransactionID xmlns=\"http://www.monternet.com/dsmp/schemas/\">9990100019175</TransactionID>").append(
		"</SOAP-ENV:Header>").append(
		"<SOAP-ENV:Body>").append(
		"<SyncOrderRelationResp>").append(
		"<MsgType>SyncOrderRelationResp</MsgType>").append(
		"<Version>1.5.0</Version>").append(
		"<hRet>0</hRet>").append(
		"</SyncOrderRelationResp>").append(
		"</SOAP-ENV:Body>").append(
		"</SOAP-ENV:Envelope>");
		return r.toString();
	}  
	

	/**
	 * 取消包
	 * @param tel
	 * @return
	 */
	public static String getCanCel(String tel){
		StringBuffer b = new StringBuffer();
		b.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>")
		.append("<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" SOAP-ENV:encodinghttp://schemas.xmlsoap.org/soap/encoding/\" xmlns=\"http://www.monternet.com/dsmp/schemas/\">")
		.append("<SOAP-ENV:Header>")
		.append("<TransactionID xmlns=\"http://www.monternet.com/dsmp/schemas/\" xsi:type=\"xsd:string\">00240301801050</TransactionID>") 
		.append("</SOAP-ENV:Header>")
		.append("<SOAP-ENV:Body>")
		.append("<UnSubscribeServiceReq xmlns=\"http://www.monternet.com/dsmp/schemas/\">")
		.append("<Version>1.5.0</Version> ")
		.append("<MsgType>UnSubscribeServiceReq</MsgType>") 
		.append("<Send_Address>")
		.append("<DeviceType>400</DeviceType>") 
		.append("<DeviceID>924403</DeviceID>")                
		.append("</Send_Address>")
		.append("<Dest_Address>")
		.append("<DeviceType>0</DeviceType>")
		.append("<DeviceID>0028</DeviceID>") 
		.append("</Dest_Address>")
		.append("<FeeUser_ID>")
		.append("<UserIDType>1</UserIDType>")
		.append("<MSISDN>"+tel+"</MSISDN>")                
		.append("<PseudoCode />") 
		.append("</FeeUser_ID>")
		.append("<DestUser_ID>")
		.append("<UserIDType>1</UserIDType>") 
		.append("<MSISDN>"+tel+"</MSISDN>")                
		.append("<PseudoCode />") 
		.append("</DestUser_ID>")
		.append("<Service_ID>")
		.append("<ServiceIDType>1</ServiceIDType>") 
		.append("<SPID>企业代码</SPID>") 						 
		.append("<SPServiceID>业务代码</SPServiceID>")           
		.append("<AccessNo />") 
		.append("<FeatureStr />") 
		.append("</Service_ID>")
		.append("</UnSubscribeServiceReq>")
		.append("</SOAP-ENV:Body>")
		.append("</SOAP-ENV:Envelope>");
		return b.toString();
	}
	
	/**
	 * 发送报文
	 * @param tel 电话号码
	 * @param msgId 消息编号
	 * @return
	 * @throws Exception
	 */
	public static boolean sendMessage(String tel,String msgId) throws Exception {   
		boolean bool = false;
		System.out.println("调用servlet开始================="); 
		String sendStr = CMMISC.getRequest(tel,msgId);
		BufferedReader reader = null;    
		try {    
			String strMessage = ""; 
			StringBuffer buffer = new StringBuffer();     
			URL uploadServlet = new URL("http://..ip../dsmp/dsmp.wsdl");  // 接报文的地址 
			HttpURLConnection servletConnection = (HttpURLConnection) uploadServlet.openConnection(); // 设置连接参数 
			servletConnection.setRequestMethod("POST");    
			servletConnection.setDoOutput(true);    
			servletConnection.setDoInput(true); 
			servletConnection.setAllowUserInteraction(true);     // 开启流,写入XML数据 
			OutputStream output = servletConnection.getOutputStream();    
			System.out.println("发送的报文:");    
			System.out.println(sendStr);     
			output.write(sendStr.getBytes());    
			output.flush();    
			output.close();  
			// 获取返回的数据  
			InputStream inputStream = servletConnection.getInputStream();    
			reader = new BufferedReader(new 
					InputStreamReader(inputStream)); 
			while ((strMessage = reader.readLine()) != null) {  
				buffer.append(strMessage); 
			} 

			System.out.println("接收返回值:" + buffer); 
			System.out.println("--------------");
			//hRet等于0为成功
			if(Integer.valueOf(getXmlResult(buffer.toString()).get("hRet"))==0){
				bool = true;
			}
			System.out.println();
		}catch (java.net.ConnectException e) {    
			throw new Exception();   
		} finally { 
			if (reader != null) {       
				reader.close(); 
			} 
		}
		return bool;
	}

	/**
	 * 解析返回的XML信息
	 * @param xml 
	 * @return 0为成功、其它为失败
	 */
	public static Map<String,String> getXmlResult(String result) {
		File f = null;
		Map<String, String> map = new HashMap<String, String>();
		try{
			f = new File("C://temp//temp"+System.currentTimeMillis()+".xml");
			if(f.exists()){
				f.delete();
			} 
			f.createNewFile();
			RandomAccessFile ra = new RandomAccessFile(f,"rw");
			ra.writeBytes(result);
			ra.close();  
			SAXBuilder builder = new SAXBuilder(); 
			Document doc = builder.build(f); 
			Element foo = doc.getRootElement();   
			List allChildren = foo.getChildren(); //获取所有节点集合
			for (int i = 0; i < allChildren.size(); i++) { 
				Element e = ((Element) allChildren.get(i));
				String nName = e.getName();
				//System.out.println(nName);  
				if(nName.equals("Header")){
					List hList = e.getChildren(); //获取Header节点集合
					for (int j = 0; j < hList.size(); j++) {
						Element eH = ((Element) hList.get(j));
						//System.out.println(eH.getName()+"---"+eH.getText()); 
						map.put(eH.getName(), eH.getText());
					} 
				}else{  
					List bList = e.getChildren(); //获取Body节点集合
					for (int j = 0; j < bList.size(); j++) {
						Element eB = ((Element) bList.get(j));
						//System.out.println(eB.getName()+"---"+eB.getContent().size()); 
						map.put(eB.getName(), eB.getContent().size()+"");
						List bEList = eB.getChildren();
						for (int k = 0; k < bEList.size(); k++) {
							Element eBE = ((Element) bEList.get(k));
							//System.out.println(eBE.getName()+"---"+eBE.getText()); 
							map.put(eBE.getName(), eBE.getText());
						} 
					} 
				}
			} 
		}catch(Exception e){ 
			e.printStackTrace();
		}finally{
			if(f!=null){
				f.delete();
			}
		}
		return map;
	}
	//取消
	public static void getCanCel() throws Exception {
		String xml = CMMISC.getCanCel("13985046628");
		BufferedReader reader = null;    
		try {    
			String strMessage = ""; 
			StringBuffer buffer = new StringBuffer();     // 接报文的地址 
			URL uploadServlet = new URL("http://..ip../dsmp/dsmp.wsdl"); 
			HttpURLConnection servletConnection = (HttpURLConnection) uploadServlet.openConnection(); 
			// 设置连接参数 
			servletConnection.setRequestMethod("POST");    
			servletConnection.setDoOutput(true);    
			servletConnection.setDoInput(true); 
			servletConnection.setAllowUserInteraction(true);     // 开启流,写入XML数据 
			OutputStream output = servletConnection.getOutputStream();    
			System.out.println("发送的报文:");    
			System.out.println(xml);     
			output.write(xml.getBytes());    
			output.flush();    
			output.close();  
			// 获取返回的数据  
			InputStream inputStream = servletConnection.getInputStream();    
			reader = new BufferedReader(new 
					InputStreamReader(inputStream)); 
			while ((strMessage = reader.readLine()) != null) {  
				buffer.append(strMessage); 
			} 

			System.out.println("接收返回值:" + buffer); 
			Map<String,String> map = getXmlResult(buffer.toString());
			System.out.println(map.get("hRet"));  //0为成功
		}catch (java.net.ConnectException e) {    
			throw new Exception();   
		} finally { 
			if (reader != null) {     
				reader.close(); 
			} 
		}
	}
	
	

}

这是反向订购、已经测试成功了。不过反向订购太“王八”了点,报文发送过去你的手机就会收到扣费信息了......立即生效的那种。

还有记得一点就是必须要在你申请的那个ip地址对应的机器上进行报文的发送,否则就会返回“9017”的错误代码:ip非法。




    
[3] 在前台运作Service
    来源: 互联网  发布时间: 2014-02-18
在前台运行Service
一个前台的service是被用户强烈关注的从而不会在内存低时被系统杀死.前台service必须在状态栏上提供一个通知,这个通知被放在"正在进行"区域中,这表示这个通知不能被解除,除非服务停止了或者从前台移除了.


  例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意它的运行.在状态栏中的通知可能会显示当前的歌曲并且允许用户启动一个activity来与音乐播放器交互.

[java] view plaincopyprint?
  • Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),  
  •         System.currentTimeMillis());  
  • Intent notificationIntent = new Intent(this, ExampleActivity.class);  
  • PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);  
  • notification.setLatestEventInfo(this, getText(R.string.notification_title),  
  •         getText(R.string.notification_message), pendingIntent);  
  • startForeground(ONGOING_NOTIFICATION, notification);  
  • Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
            System.currentTimeMillis());
    Intent notificationIntent = new Intent(this, ExampleActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    notification.setLatestEventInfo(this, getText(R.string.notification_title),
            getText(R.string.notification_message), pendingIntent);
    startForeground(ONGOING_NOTIFICATION, notification);

      要请求你的service运行于前台,调用startForeground().此方法有两个参数:一个整数唯一的标识一个通知,和这个用于状态栏的通知,例如:


      要从前台移除service,调用stopForeground().这个方法有boolean型参数,表明是否也从状态栏删除对应的通知.这个方法不会停掉service.然而,如果你停止了正在前台运行的service,这个通知也会被删除.


      注意:方法startForeground()和方法stopForeground()是从Android2.0 (API Level 5)引入的.为了在早期版本是于前台运行你的service,你必须使用以前的那个setForeground()方法—见startForeground()的API文档查看如何提供与旧版本的兼容性.


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3