存档

文章标签 ‘Android’

手机网页启动App问题小结

2014年12月17日 没有评论

在Android和iOS设备中,通过网页调用起App,比较简单的方式就是使用自定义协议,比如:

msblog://xxx/xxx

Android和iOS的App分别指定msblog这个scheme,然后通过网页直接访问这个地址,就打开相应的应用了。

基础的讲完了,下面说问题。
更多内容…

分类: 工作 标签: ,

Android卫片离线地图开发小结

2014年5月29日 没有评论

持续投入了一段时间在Android的卫片离线地图上,经过了不少波折,简单总结一下。
更多内容…

分类: 工作 标签: ,

Android取周边wifi列表

2014年3月27日 没有评论

上回书说到说mac地址,这次的其实还是同一个东东,只不过想自动收集周边的wifi及基站信息。
基站信息且不谈,wifi列表很有特点。
我的策略是当定位成功,发现离上次定位点超过50米时,记录下周边的wifi及基站列表。
用我的三星mega在城铁上测试,基站变化很及时,wifi列表存在刷新周期的问题:城铁跑了几公里,wifi列表取出来的还是同一批,这显然有问题。
临时用一个很低劣的手段处理:当发现本次的wifi列表跟上次完全相同时,忽略本次wifi列表采集。这样只会取位移变化达到条件时,第一条发现这批wifi的位置,相对来说更准确一些。
当然了,事情到这还没完。
更多内容…

Android取MAC地址

2014年3月24日 没有评论

纯属个人兴趣,最近学Android开发,搞了个小软件,用来跟踪使用者,记录这个设备在什么时间在哪个位置,及海拔和速度。
准备搞成自己的航迹图,将来哪天想查一天,自己某天的某时去了哪里,可以直接查到。自己的忠实记录仪。
采集后本地存储,有网就上传,然后通过百度地图或google地图实时跟踪。
当然,由于伟大的GFW,我不得已选了百度地图,不过用起来扩展性也还行。好吧,跑题了。

问题来了,需要有一个唯一标识来识别这个设备。比如软件重装了,唯一标识就变了,跟之前的记录连不上,这就有问题了。
我首先想到的是mac地址,用的是这个方法

Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
while (nis.hasMoreElements()) {
	NetworkInterface ni = nis.nextElement();
	if (ni.isLoopback()) {
		continue;
	}
	if (ni.getHardwareAddress() == null)
		continue;
	return ni.getHardwareAddress();
}

除了loopback外,取第一个。
后来很悲剧的发现,重装后(也可能是做了别的什么操作),这个值会变,我把getNetworkInterfaces()全列出来,大概有七八个。
其中有一个name很面熟wlan0,确认它是wifi无线网卡,就果断用它。
试用发现,当wifi未连接时,这一项就没有。结论是:此路不通。
更多内容…

Android的https请求有机率连接失败

2014年1月7日 没有评论

很久之前的问题,印象中写过blog存档,今天翻了一下,发现没了,只能按记忆写一下,当初抓的包和分析的几种case也丢了。

问题:Android客户端访问https服务的时候,机率性连接失败,然后忽然在某个时候成功(大概是卡了十分钟以后)。iPhone客户端正常。
想当然的会认为是Android客户端层面的问题,因为iPhone正常。

分析过程:抓包发现Android的tcp报文带了TS(timestamp),而iPhone没带。
处理结果:把第一层反向代理上的timestamp关掉,以解决此问题。
更多内容…

分类: 工作 标签: , , ,

gzip在Android4.4下面崩溃的问题

2013年12月11日 3 条评论

最近在搞的一个项目,在Android 4.4(API 19)下,gzip会崩溃。
相关的调用代码如下:

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        GZIPOutputStream gos = null;
        try {
            gos = new GZIPOutputStream(baos);
            gos.write(srcData);
            gos.finish();
            gos.flush();//这里会崩溃
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            gos.close();
        }

崩溃时的日志如下:

11-25 15:33:13.757: E/AndroidRuntime(10723): FATAL EXCEPTION
11-25 15:33:13.757: E/AndroidRuntime(10723): Process: com.xxxxx, PID: 10723
11-25 15:33:13.757: E/AndroidRuntime(10723): java.util.zip.DataFormatException: stream error
11-25 15:33:13.757: E/AndroidRuntime(10723): 	at java.util.zip.Deflater.deflateImpl(Native Method)
11-25 15:33:13.757: E/AndroidRuntime(10723): 	at java.util.zip.Deflater.deflateImpl(Deflater.java:241)
11-25 15:33:13.757: E/AndroidRuntime(10723): 	at java.util.zip.Deflater.deflate(Deflater.java:232)
11-25 15:33:13.757: E/AndroidRuntime(10723): 	at java.util.zip.DeflaterOutputStream.flush(DeflaterOutputStream.java:193)
11-25 15:33:13.757: E/AndroidRuntime(10723): 	at com.xxxxx.xx.Xxx.compress(Xxx.java:727)
...此处略去N行无关信息
11-25 15:33:13.757: E/AndroidRuntime(10723): 	at android.os.Handler.dispatchMessage(Handler.java:102)
11-25 15:33:13.757: E/AndroidRuntime(10723): 	at android.os.Looper.loop(Looper.java:137)
11-25 15:33:13.757: E/AndroidRuntime(10723): 	at android.os.HandlerThread.run(HandlerThread.java:61)

更多内容…