AndroidデバイスからWindows共有フォルダーにファイルを書き込もうとしています。私は最新バージョンの JCIFS を使用しており、利用可能なネットワーク共有を表示するコードは正常に動作します。したがって、JCIFS と LAN、WiFi などはすべて問題ないと思います。ファイル アップロードのコードは次のとおりです (実際には、テキスト Sring をファイルに書き込みたいだけです)。
public boolean save2Samba(String text, String fileName) {
try {
// My Windows shares doesn't require any login/password
// String name="login";//my windows username
// String password="password1";//my windows password
// sSambaFolder contains a path like MYPC/E/SharedFolderName/
String url = "smb://" + sSambaFolder.toLowerCase()+fileName;
SmbFile file = null;
try {
// assume ANONYMOUS is my case but there is no description of this in JCIFS API
NtlmPasswordAuthentication auth = NtlmPasswordAuthentication.ANONYMOUS;
file = new SmbFile(url, auth);
android.util.Log.i("TestApp",url);
// output is like smb://mypc/e/sharedfoldername/file.txt;
SmbFileOutputStream out = new SmbFileOutputStream(file);
out.write(text.getBytes());
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
URLがログに記録されているので、正しいと確信しています(上記のコードを使用してURLを確認し、フォルダーの内容を参照しました)。
しかし、問題は私が常に同じになっていることです:
W/System.err(3214): jcifs.smb.SmbAuthException: Access is denied.
共有はパスワードで保護されていないため、アクセスするためにユーザー名/パスワードは必要ありません。別の WinPC からファイルを読み取り/書き込み/削除することができ、認証は必要ありません。また、共有を使用して WinPC でユーザーのパスワードを作成しようとしましたが、結果は同じでした。そこで、いくつかのバージョンの NtlmPasswordAuthentication を試してみましたが、うまくいきませんでした:
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(":");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Administrator:"); //actual username on WinPC with shares
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Administrator");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,"Administrator","");
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null,"","");
では、共有フォルダーへのアクセスに認証が必要ない場合に、何が間違っているのか、どのように目標を達成するのですか?
Linuxベースでsambaクライアントを使用している私のSamsung TVは問題なく同じ共有フォルダにアクセスしており、そこからMP3を再生しています(そうです、読み取り専用です)。私の AOS デバイスは (イーサネット経由で接続されているテレビの代わりに) WiFi 経由で LAN にアクセスしているため、ノートブック + WiFi を使用して共有フォルダーへのアクセスも確認しましたが、問題は見つかりませんでした。
追加:
次の行を実行しようとしています:
file = new SmbFile(url, auth);
android.util.Log.i("save2Samba", "file.exists(): " + file.exists());
同じアクセスが拒否されます。私はファイルを書き込もうとしていません...