我試圖通過電纜將Android設備連接到一個(64位Windows 7)PC,然後從Android編程方式檢索一些文件到PC。 (注:我需要一個特定的設備,Moverio BT-200,並且我遇到了驅動程序問題;所以請不建議使用adb ;-)我知道這是簡單和快速的方式,但它不是可行)如何將文件從Android設備使用USB傳輸到PC和/或WPD
我發現,我的設備可以被看作是一個Windows便攜式設備(WPD)。我在C#中找到了一些非常好的代碼示例,它使我可以使用detect WPDs,enumerate their contents和transfer the contents。我還在C++中找到了一些代碼,其代碼爲all of the above and much more。所有這些例子的作用就像一個魅力,只要我連接一個單一的SD卡或一個USB密鑰(即:只要我有一個設備被Windows識別並獲得一個字母作爲正確的驅動器),我得到目前文件的完整列表及其絕對路徑。但是,如果我嘗試連接Android設備,並列出內容,我得到的東西,我不明白:
embt2
SD Card
o15F9A
o15F9B
o15F9C
o15F9D
o15F9E
...etc
Internal Storage
o1
o2
o3
o4
o5
o6
oD1F
oD20
oD24
o7
o8
o1E78
o9
...etc
這怎麼可能?瀏覽C#代碼(第二個鏈接,上面),我發現,在某些點,代碼創建了幾個GUID對象,每個都與一些稍有不同的參數:
// Identify the property to retrieve
var property = new _tagpropertykey();
property.fmtid = new Guid(0x26D4979A, 0xE643, 0x4626, 0x9E, 0x2B,
0x73, 0x6D, 0xC0, 0xC9, 0x2F, 0xDC);
property.pid = 12;
[...]
// Get the name of the object
string name;
var property = new _tagpropertykey();
property.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC,
0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C);
property.pid = 4;
[...]
// Get the type of the object
property = new _tagpropertykey();
property.fmtid = new Guid(0xEF6B490D, 0x5CD8, 0x437A, 0xAF, 0xFC,
0xDA, 0x8B, 0x60, 0xEE, 0x4A, 0x3C);
property.pid = 7;
[...]
var folderType = new Guid(0x27E2E392, 0xA111, 0x48E0, 0xAB, 0x0C,
0xE1, 0x77, 0x05, 0xA0, 0x5F, 0x85);
var functionalType = new Guid(0x99ED0160, 0x17FF, 0x4C44, 0x9D, 0x98,
0x1D, 0x7A, 0x6F, 0x94, 0x19, 0x21);
但我無法弄清楚如何將這些exadecimal值工作。網上的文件似乎很少。我發現我的設備guid與設備管理器({eec5ad98-8080-425f-922a-dabf3de3f69a}
),但每次我試圖用我自己的GUID替換之一,我得到一個COMException。
我是否找對了地方?我需要設置一些GUID還是其他?
我標記這個問題,C#和C++,因爲我發現這兩種語言的一些代碼示例,但我願意解決任何語言問題(使用Java,Python,...)
我不認爲所顯示的代碼可以編譯,因爲它重新聲明瞭名稱「property」。無論如何,它只是創建'Guid'對象。閱讀Wikipedia中的GUID。 –
@Cheers這不是確切的代碼:我只是複製粘貼來自原始項目中不同位置的代碼塊。閱讀第二個鏈接以獲得完整的解釋。 (是的,它會編譯,因爲這是一段精確的代碼,只是覆蓋相同的變量)。我真的不認爲維基百科頁面可以解決我的問題。所有的GUID都是我的猜測,我不確定我的問題在那裏。 – ocramot
*如果它不是用於多個「var」,它會進行編譯。我的錯。 – ocramot