2013-01-15 2 views
4

내 프로젝트의 경우 센서 데이터를 파일로 저장하고 나중에 분석을 위해 PC에서 액세스 할 수 있기를 원합니다. 이것은 내가 지금까지 가지고 성공적으로 작동하는 코드입니다 :Nexus 7의 외부 저장소에 파일 저장 및 PC에서 검색

File root = Environment.getExternalStorageDirectory(); 
File csvfile = new File(root, "Sensor_Data.csv"); 
FileWriter writer = new FileWriter(csvfile, true); 
writer.append("Time"); 
writer.append(','); 
writer.append("Position"); 
writer.append('\n'); 
Number data[] = new Number[4000]; 
for (int i = 0; i<4000; i+=2){ 
    posHistory.toArray(data); 
     writer.append(String.valueOf(data[i])); 
    writer.append(','); 
     writer.append(String.valueOf(data[i+1])); 
    writer.append('\n'); 
} 
writer.flush(); 
writer.close(); 

문제는 넥서스 7이 실제로 나는 그것이 대부분과 호환되도록하기 위해 에뮬레이터의 일종을 사용하여 생각 (외부 저장 장치를하지 않는다는 것입니다 앱에서 코드에 외부 저장소를 사용하는 응용 프로그램)

장치에서 Astro File Manager를 사용하여이 코드를 실행 한 후/sensor/data/sdcard0 파일의 네 위치에 "Sensor_Data.csv"파일이 표시됩니다./storage/emulated/0 및/storage/emulated/legacy가 있습니다. 그리고 그들 각각은 texteditor 또는 documentviewer를 사용하여 장치 내에서 열 수 있으며 모든 데이터가 있습니다.

문제는 Nexus 7을 PC에 연결할 때 실제로 열 때 실제 내부 저장소가 아닌 가상 SD 카드의 내용 만 표시되지만 .csv 파일은 ' 거기있어. "storage/emulated/legacy"라는 추가 디렉토리가 있지만 아무것도없고 "sdcard0"또는 "0"폴더도 없습니다. "Environment.getExternalStorageDirectory(). getAbsolutePath()"를 실행하여 경로가 정확히 무엇인지 확인합니다./

파일을 내부 저장소의 아무 곳에 나 저장하지 않고 저장하려고 시도했지만 앱을 외부 저장소를 사용하는 대부분의 기기와 호환되도록 '외부 저장소'에 보관하는 것이 좋습니다.

UPDATE 그래서 ADB 풀 파일 이름을 사용 후 여기 결과입니다 :

adb pull /storage/emulated/0/Sensor_Data.csv 
remote object '/storage/emulated/0/Sensor_Data.csv' does not exist 

adb pull /storage/emulated/legacy/Sensor_Data.csv 
243 Kb/s <1495 bytes in 0.006s> 

adb pull /storage/sdcard0/Sensor_Data.csv 
243 Kb/s <1495 bytes in 0.006s> 

adb pull /sdcard/Sensor_Data.csv 
243 Kb/s <1495 bytes in 0.006s> 

그래서, 작동하지 않는 유일한 위치 /storage/emulated/0/Sensor_Data.csv 짝수는 아스트로 네에서 그것을보고 로그 캣 그것이/저장 장치에 저장되고 있음을 보여주고 있지만 /도/0/

그냥

,498에 저장하려고 에뮬레이트3210

Astro에서 같은 네 위치에서 다시 볼 수 있지만 Windows 탐색기를 거쳐 다운로드 폴더로 이동할 때 해당 폴더가 없습니다.

+1

내가 찾았습니다. Nexus 4 및 7의 버그입니다. http://stackoverflow.com/questions/13737261/nexus-4-not-showing-files-via-mtp – billtian

+0

굉장하고, 이것이 단지 넥서스 7의 버그이며 앱이 아니라 실제 SD 카드를 사용하는 다른 안드로이드 기기에서도 잘 작동해야합니다. 곧 확인을 위해 넥서스 7/4 이외의 응용 프로그램에서 응용 프로그램을 테스트 해 보겠습니다.바라건대이 버그가 안드로이드 업데이트에서 수정되기 전에 그것은 단지 시간 문제입니다. –

답변

0

"adb pull filename"이있는 터미널과 Astro가 보는 전체 경로 이름을 사용해 보셨습니까? 그게 작동해야하고, 당신이 이것을 사용한다면 당신 자신도 그렇게 어렵지 않을 것입니다.

+0

adb pull 결과가있는 원본 게시물이 업데이트되었습니다. 파일이 아무런 문제없이 생성되었다는 것을 알았습니다. 문제는 파일을 컴퓨터로 가져 오는 것입니다. 물론 adb 도구를 사용할 수 있지만이 응용 프로그램은 adb 도구가없는 사용자를위한 것입니다. –

0

Nexus 4에서도 이와 같은 현상이 발생했습니다. 파일이 내 전화기에 있었지만 (adb 쉘을 사용하여 파일을 찾았습니다.) 랩톱의 파일 탐색기에서 파일을 찾을 수 없습니다. @billtian처럼 Nexus 4 및 7 기기의 버그 인 것 같습니다. 나는 오래된 Ericsson Xperia에서 코드를 시험해 보았다. 거기서 랩탑을 통해 파일을 찾을 수 있었다.

0

왜, 귀하의 메일로 보내지 않는 것이 가장 좋습니다. 다음 예를 참조하십시오.

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/plain"); 
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); 
intent.putExtra(Intent.EXTRA_SUBJECT, "subject here"); 
intent.putExtra(Intent.EXTRA_TEXT, "body text"); 
File root = Environment.getExternalStorageDirectory(); 
File file = new File(root, xmlFilename); 
if (!file.exists() || !file.canRead()) { 
    Toast.makeText(this, "Attachment Error", Toast.LENGTH_SHORT).show(); 
    finish(); 
    return; 
} 
Uri uri = Uri.parse("file://" + file.getAbsolutePath()); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 
startActivity(Intent.createChooser(intent, "Send email..."));