在编写android项目时,我们可以通过Log去查看程序的执行状态和打印信息。



然而在ANE中这些Log的内容是无法通过控制台看到的,也就是说程序在android部分出错了我们很难知道程序是在那一步出错了。那么应该用什么来替代Log呢? 日前我就遇到了这样的问题,我的解决方案是是使用Socket。

这个方法主要包含2个部分

1.客户端--------代码会写在android部分

2.服务器--------任何能实现SocketService的都可以,由于对flash熟悉且对性能方面无要求我使用的是air

服务器的实现是简单到不能再简单将收到的信息打印出来,由于代码很少我直接全部粘贴了,相信不需要注释也是能读懂的

package{import flash.display.Sprite;import flash.events.ProgressEvent;import flash.events.ServerSocketConnectEvent;import flash.net.ServerSocket;import flash.net.Socket;import flash.text.TextField;import flash.utils.ByteArray;public class TestSocketServices extends Sprite{private var ss:ServerSocket;private var tf:TextField;private var cs:Socket;public function TestSocketServices(){initSS();}private function initSS():void{ss = new ServerSocket();ss.bind(5689);ss.addEventListener(ServerSocketConnectEvent.CONNECT, onConnect);ss.listen();tf = new TextField();addChild(tf);tf.width = stage.stageWidth;tf.height = stage.stageHeight;tf.border = true;tf.borderColor = 0;tf.wordWrap = tf.multiline = true;}private function log(msg:String):void{tf.appendText(msg + "\n");trace(msg);}protected function onConnect(event:ServerSocketConnectEvent):void{cs = event.socket;cs.addEventListener(ProgressEvent.SOCKET_DATA, getData);}protected function getData(event:ProgressEvent):void{if(cs.bytesAvailable){var ba:ByteArray = new ByteArray();cs.readBytes(ba, 0, cs.bytesAvailable);log("msg from android:" + ba.toString());}}}}

客户端的代码更是简单,我也完全粘贴吧

package com.example.sockets;import java.io.IOException;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class SocketLog {private static SocketLog _ins; private Socket cs;PrintWriter out;public SocketLog(){try {cs = new Socket("192.168.1.32", 5689);out = new PrintWriter(cs.getOutputStream());} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static SocketLog ins(){if(_ins == null){_ins = new SocketLog();}return _ins;}public void log(String msg){out.print(msg);out.flush();}}

需要注意的是IP地址和端口号需要根据实际情况进行设置。

接下来是如何使用,其实也很简单

只需要将android中的log(...)的代码替换成SocketLog.ins().log(...)就可以了。

看看实际的效果吧



最后要说明的一点很重要。当运行程序的时候发现程序一直启动不起来很有可能是你的服务器没有启动,程序一直在连接服务器导致。所以测试的时候记得开服务器,发布的时候记得将相关代码去除!

更多相关文章

  1. 微软Office应用将于明年3月登陆iOS与Android
  2. 深入理解 Android(安卓)消息机制原理
  3. Java利用TCP协议发送文件(三)--客户端设计
  4. 一个简易Android购物App的开发
  5. Android(安卓)App 安全的HTTPS 通信
  6. Java JDK 收费,Android(安卓)也坐不住了,程序员们该咋办?
  7. Android向导页面的实现
  8. 开源中国 4 周年, Android、iPhone、WP7三个平台客户端全面开源
  9. Develop -- Training(十四) -- 打印内容

随机推荐

  1. win10下cmake编译Android opencv库问题
  2. Android四种点击事件和五中存储方式
  3. Using Memory Efficiently(Pro Android A
  4. Android中的跨进程通信的实现——远程调
  5. 设置和取消闹钟
  6. Android(安卓)ViewPager左右滑动月历
  7. Android Logcat 封装类
  8. android中的侧滑效果
  9. Android(安卓)BCM4330 FM 驱动驱动
  10. ubuntu下启动AS 模拟器报错" Unknown AVD