adb shell am start -d 启动应用之uri被*吃了

众所周知,am start 可以用来启动activity的,这里就不再详述了,但如果要带参数呢,那么我们也可以通过-e key value等方式来设置,基本也不会有什么问题。而且今天发生问题的是通过uri进行参数据设置时发现总是只有第一个参数有,后面的参数被吃了。。

这里啰嗦一句,-e key value在代码中对应的方式是intent.putExtra*的方式,而-d uri是通过intent.setData的方式,而接收方获取数据的代码自然也就不一样了,所以不要说干嘛不直接就是-e的方式来设置参数

回到主话题,这是通用的uri形式
scheme://host/pathPrefix?key=value&key2=value2&key3=value3
当我们在adb shell时,会很自然的 adb shell am start -n 包名/类名 -d uri
然后就出事了
在代码中我们只能接收到scheme://host/pathPrefix?key=value,后面的参数被吃了,其实在终端输入命令后,仔细看一下输出的日志就能发现输入的uri就是被截断的,所以很明显问题就是发生在终端,输入的源错了,后面自然也就错了
一开始的反应自然是检查下uri有没有错,但没有

接着联想到特殊字符

没错,还真有需要转义的字符&,这个是shell中的特殊字符。。。
表示后台运行,而在shell中转义字符为‘’或“”

即我们的命令要输成
adb shell am start -n 包名/类名 -d “scheme://host/pathPrefix?key=value&key2=value2&key3=value3“

adb shell am start -n 包名/类名 -d ‘scheme://host/pathPrefix?key=value&key2=value2&key3=value3’

也可以是
adb shell am start -n 包名/类名 -d scheme://host/pathPrefix?key=value’&’key2=value2’&’key3=value3

最后还有个一小区别adb shell 直接 拼接命令和adb shell 进入后再输入命令在不同的系统上是有区别的,adb shell 进入后自然是linux系统,but….adb shell 直接拼命令这个要看你的电脑系统了,mac 是unix 和window 自然有些不一样,但大部份命令还是没有问题的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值