티스토리 뷰
Windows에서 파일 공유를 위해 사용하는 프로토콜은 smb이다.
즉 Android에서 윈도우의 파일을 가져오거나 윈도우로 파일을 전송할 때는 SMB를 통하여 하면 된다.
JAVA용 SMB라이브러리는 jcfis가 있다. 아래 링크 누르면 다운 받을 수 있다.
위 라이브러리를 Android Project에 임폴트 한 후에 다음과 같이 코딩 해주면 파일을 전송하거나 받을 수 있다.
우선 아래와 같이 네트워크 연결 상태를 확인한다.
/** * Network 연결 상태를 확인한다. */ private boolean checkNetworkStatus() { WifiManager wManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); WifiLock wLock = wManager.createWifiLock(TAG); wLock.acquire(); ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); if(cm == null) { Log.d(TAG, "Fail to get network services"); return false; } if(!cm.getActiveNetworkInfo().isConnected()) { Log.d(TAG, "Failt to connect"); return false; } return true; }
/** * SD카드에서 파일을 읽어서 SMB로 전송한다. */ private void outputFile() { try { FileInputStream fis = new FileInputStream("sdcard/test.jpg"); String url = "smb://guest@127.0.0.1/jhbaek/test.jpg"; //String url = "smb://id:password@ip/folder/test.jpg"; SmbFile smbFile = new SmbFile(url); SmbFileOutputStream sos = new SmbFileOutputStream(smbFile); byte[] b = new byte[8192]; int n = 0; while((n = fis.read(b)) > 0){ sos.write(b, 0, n); } fis.close(); sos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SmbException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
아래는 SMB에서 파일을 읽어서 SD카드에 저장하는 코드이다.
/** * SMB로 파일을 가져와서 SD카드에 쓴다. */ private void inputFile() { try { String url = "smb://guest@127.0.0.1/jhbaek/test.jpg"; //String url = "smb://id:password@ip/folder/test.jpg"; SmbFile smbFile = new SmbFile(url); FileOutputStream fos = new FileOutputStream("sdcard/test.jpg"); SmbFileInputStream sfis = new SmbFileInputStream(smbFile); byte[] b = new byte[8192]; int n = 0; while((n = sfis.read(b)) > 0){ fos.write(b, 0, n); } fos.close(); sfis.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SmbException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
또한 아래와 같은 권한이 필요하기 때문에 매니페스트에 넣도록 한다.
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
'Development > Mobile' 카테고리의 다른 글
[Android] DB - SQLite (2) | 2010.12.28 |
---|---|
[Android] SQLite3 기본 (0) | 2010.12.24 |
[Android] Activity에서 바로 SQLite3 DB 사용하기 (0) | 2010.12.24 |
[Java] jUnit 사용하기 (0) | 2010.12.24 |
[Android] Conversion to Dalvik format failed with error 1 (2) | 2010.12.23 |
[Java/Android] Override annotation 에러 발생 시 (0) | 2010.12.18 |
[Android] Android Layout (0) | 2010.12.16 |
[Android] Custom UI Sample 많은 사이트 (0) | 2010.12.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- it
- database
- 프로그래밍
- 드라이버
- Troubleshooting
- Python
- jni
- source
- jni강좌
- 음악
- kering
- db
- API
- linux
- MFC
- C
- algorithm
- Visual C++
- winapi
- 리눅스
- 안드로이드
- NDK
- driver
- AWS
- java
- Quiz
- C++
- Cloud
- gcc
- android
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함