am start的总结,-d参数的总结,以及python中传递内容包含中文及特殊字符&的解决方案

一、am start的内容的整理

主要包含以下内容:am start的常规操作及参数的含义,-d 参数的含义,以及如何在APK中设置参数获取

使用命令如下:adb shell am start -n com.test.myapp/.Activity.TestActivity -d '%s'

在python中具体调用的时候,会用""将内容全部包裹起来,然后再通过%变量去替换'%s'

例如:

cmd3 = "adb shell am start -n com.ganji.testwebview/.Activity.OriginalTestActivity -d '%s'" %url

这里-d就是用来传递给APP的参数,这个-d传递的就是intent的数据,

那么在APK中是如何接收这个-d后面的参数的呢?-d这个参数后面的内容就代表是通过Intent传递的:

具体语句为:urltext=getIntent().getDataString();

关于getIntent的一个具体用法,怎么获取不同类型的数据见下方地址:http://blog.csdn.net/flowingflying/article/details/9364799

具体的am start的一个详解地址如下:

http://gityuan.com/2016/02/27/am-command/

二、python传递数据包含中文的问题以及特殊字符的问题

在通过adb shell将包含了&的url的内容传递给APK的时候,会出现无法跳转的情况,原因是在shell中&是一个特殊字符,因此要通过一个单引号'将&包裹起来,刚开始的时候,在一中的adb命令为:

adb shell am start -n com.test.myapp/.Activity.TestActivity -d %s

后来增加了'%s'

测试之后,发现增加了''单引号之后,url的整个内容都能够完整传递过去,但是这仅限于windows下,在linux下因为&是一个特殊符号,所以通过adb shell am start的方式启动Activity之后将url传递过去,会出现截取url的情况,比如说:https://baidu.com/1243&w3fs&jhre=12,就会截取url到第一个&那里,这样就会导致想要加载的url加载不全,那么得到的结果也不正确,因此针对这样的情况,而且因为存在&很容易出现am start失败的情况,经常Activity就启动失败,但是如果不带这个参数就基本不会失败,因此修改成了:

通过读取sdcrad中的文件,将内容设置成EditText的内容,那么这个sdcard中的内容就需要提前将本次url的内容先写入到文件中,再将这个包含url内容的文件push到sdcard中,通过这种方式修改后,就没有出现am start失败的情况了,而且url的内容能够显示完全,并且通过正确的url请求到正确的信息

备注:在往文件中写url的内容的时候,需要注意打开文件的方式,建议通过'wb'的二进制方式打开,之前通过'w'直接打开,存在中文及特殊字符的情况下,会导致因为编码方式的原因而提示异常导致失败,因此改成二进制的方式进行写文件

另外,就是url中存在中文的情况也会因为编码的方式导致出现问题,用了一个完全通用的方式进行处理:

import sys

reload(sys)

sys.setdefaultencoding('utf8')

因为使用的是python27,就在添加以上set语句之前先通过下方的语句测试了一下:

print sys.getdefaultencoding(),结果是ascii

加上以上语句之后:结果是utf8

其中utf-8和utf8的区别是什么呢?具体见下方url:http://blog.mimvp.com/2014/12/difference-between-python-utf-8-and-utf8/

原文地址:https://www.cnblogs.com/keke-xiaoxiami/p/7521835.html