# 루트 디렉토리 접근 및 제어
기본적으로 안드로이드의 data/data 폴더는 루팅을 해야만 접근이 가능하다.
특히 구글 글래스를 USB로 연결해보면 internal storage에 DCIM이랑 Pictures 폴더밖에 없다. 개발자용이 아니라 adb를 이용해야만 디렉토리에 접근이 가능하다고 한다.
1) 경로 탐색
adb shell 로 접속한다음 ls 등의 리눅스 명령어를 통해 탐색.
1-1) 여러개의 안드로이드를 연결했을 때,
adb devices; //연결된 안드로이드의 ID리스트 출력
adb -s [ID] shell;
2) 파일 가져오기
adb pull /storage/sdcard0/AutoRecorder/test.txt test.txt
- 파일 전송 : http://androidforums.com/eris-all-things-root/185671-access-root-files-pc.html
http://www.herongyang.com/Android/adb-push-and-pull-Command.html
다양한 adb 명령어 : http://wampa.tistory.com/23
- 안드로이드를 PC와 연결했을 때, 디렉토리 새로고침 하는 함수.
<protected-broadcast android:name="android.intent.action.MEDIA_MOUNTED" />
public void refreshSD() {
//sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+Environment.getExternalStorageDirectory()+ File.separator + "DCIM/Camera/")));
//이방법은 4.4 버전이후로 안된다고 한다..
MediaScannerConnection.scanFile(this, new String[] { Environment.getExternalStorageDirectory().toString() }, null, new MediaScannerConnection.OnScanCompletedListener() {
/*
* (non-Javadoc)
* @see android.media.MediaScannerConnection.OnScanCompletedListener#onScanCompleted(java.lang.String, android.net.Uri)
*/
public void onScanCompleted(String path, Uri uri)
{
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
}
MainActivity의 onCreate나 onDestroy 에서 실행해주면 편하다.
# 안드로이드 경로
1) Environment.getExternalStorageDirectory();
/storage/emulated/0/ (=/storage/sdcard0 =/sdcard 셋다 모두 동일한 경로를 가리킨다. 맨 처음 경로를 사용하자.)
(보통 이것만 있으면 충분하다.)
- 입출력
입출력에는 다음과 같은 카테고리가 있다.
1) Buffered 가 붙은것과 안붙은 것 : Buffered가 붙으면 버퍼가 찰때마다 바로바로 입출력을 해서 성능이 훨씬 빠르단다.
2) InputStream, OutputStream : ByteStream을 입출력하는 것
3) Write, Reader : 텍스용 입출력 함수(2번을 이용해서 Write와 Reader를 구현한듯하다.)
내가 사용한 예제 코드이다.
File mfile1 = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "test1.txt");
FileWriter mfw= null;
BufferedWriter bfw = null;
boolean www = mfile1.createNewFile();
byte[] buffer = new byte[1024]; // buffer store for the stream
int bytes; // bytes returned from read()
mfw = new FileWriter(mfile1, true);
bfw = new BufferedWriter(mfw);
bfw.append(bytes2String(buffer, bytes));
bfw.close();
mfw.close();
* 안드로이드 파일 Write 할때 주의점
아주 간단한 사실인데 이것 때문에 엄청나게 고생했다.
안드로이드 내부 sd 카드에 새로운 파일을 생성하는 경우, usb를 뺏다가 다시 꽂아야만 그 파일을 PC에서 확인할 수 있다... 즉 새로고침이 작동하지 않는다...
http://blog.naver.com/PostView.nhn?blogId=slrkanjsepdi&logNo=90140711064
- CSV 입출력
opencsv 라이브러리로 매우 간단히 구현 가능하다.
#참고 : String split 시, "."은 "\\."으로 입력해야한다.
http://www.codeproject.com/Questions/491823/Read-fWriteplusCSVplusinplusplusAndroid
- 네트워크 통신
http://www.coderzheaven.com/2012/03/29/uploading-audio-video-or-image-files-from-android-to-server/
'Development > Free Topic' 카테고리의 다른 글
디자인 패턴(Design Pattern) (0) | 2014.06.11 |
---|---|
안드로이드 여러가지 트러블 슈팅 (0) | 2014.06.10 |
[톰캣] 리눅스 톰캣 재시작 (0) | 2014.05.18 |
[HTML] onsubmit (0) | 2014.05.18 |
세션 한글 정보 처리 (0) | 2014.05.13 |
댓글