1.說明
為什么說是冷知識,因為大多數項目用不到,所以歸類為冷知識。
本文主要介紹如何通過手機來瀏覽同局域網內電腦上的文件或者同局域網內其他存儲設備上的文件(存儲設備有SMBA服務)。
2.用到的資源:
JCIFS項目: https://jcifs.samba.org
SMB錯誤碼: https://msdn.microsoft.com/en-us/library/ee441884.aspx
3.簡單使用
a.去官網下載最新的"jcifs-1.3.18.jar"并引入項目中去。
b.在自己的Application onCreate中設置基礎配置
System.setProperty("jcifs.smb.client.dfs.disabled", "true");
System.setProperty("jcifs.smb.client.soTimeout", "1000000");
System.setProperty("jcifs.smb.client.responseTimeout", "30000");
* jcifs.smb.client.dfs.disabled 這個屬性一定記得設置true,其默認值是false,不然連接會非常非常的慢。
jcifs.smb.client.dfs.soTimeout、jcifs.smb.client.responseTimeout 這兩個屬性可以設的稍微大點,避免網絡不穩定帶來的連接中斷。
c.登錄鑒權(針對電腦設置了密碼的情況)
String ip = "192.168.1.100";
String username = "AFAP";
String password = "123456";
UniAddress mDomain = UniAddress.getByName(ip);
NtlmPasswordAuthentication mAuthentication = new NtlmPasswordAuthentication(ip, username, password);
SmbSession.logon(mDomain, mAuthentication);
*至此,就完成了鑒權,接下來可以瀏覽電腦里的文件了。當然,實際過程你會遇到各種異常,請根據日志解決。
d.瀏覽各磁盤下文件夾與文件
// 獲取跟目錄然后獲取下面各個盤符
String rootPath = "smb://" + ip + "/";
SmbFile mRootFolder;
// 匿名登錄即無需登錄
if (mSpu.isAnonymous()) {
mRootFolder = new SmbFile(rootPath);
} else {
mRootFolder = new SmbFile(rootPath, mAuthentication);
}
try {
SmbFile[] files;
files = mRootFolder.listFiles();
for (SmbFile smbfile : files) {
mAdapterList.add(smbfile);
}
} catch (SmbException e) {
// ...
}
后面就是根據得到的文件進行展示或者其他操作了,比如復制、改名、上傳等。
4.注意點
- 被訪問目標需要關閉防火墻;
- 加載遠程文件列表等操作都是網絡操作,不能在UI線程進行。
其他相關
- ** 手機端直接在線播放遠程視頻文件(SMB轉Http協議): ** http://www.lxweimin.com/p/e576c8df04bc