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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM