2014-04-07 1 views
1

위치가 바뀔 때마다 경도와 위도 값을 텍스트 파일에 쓰려고합니다. 그 결과는 위도와 경도 값 목록이 들어있는 SD 카드에 저장된 텍스트 파일이어야합니다. 응용 프로그램이 성공적으로 경도와 위도를 가져오고 파일이 성공적으로 저장되었다는 메시지가 튀어 나옵니다. 그러나 SD 카드의 루트에서 텍스트 파일을 찾을 수 없습니다. 어디에 위치 값을 사용하여 파일이, 그래서 기본적으로루트 SD 카드에서 .txt 파일의 위치를 ​​찾아야합니다.

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.OutputStreamWriter; 

import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity 
{ 
TextView textlat; 
TextView textlong; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    textlat = (TextView)findViewById(R.id.textlat); 
    textlong = (TextView)findViewById(R.id.textlong); 

    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    LocationListener ll = new mylocationlistener(); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
      10000, 0, ll); 
} 

private class mylocationlistener implements LocationListener 
{ 

    @Override 
    public void onLocationChanged(Location location) 
    { 
     if (location != null) 
     { 
      double pLong = location.getLongitude(); 
      double pLat = location.getLatitude(); 

      textlat.setText(Double.toString(pLat)); 
      textlong.setText(Double.toString(pLong)); 

      try 
      { 
       File myFile = new File("/sdcard/mysdfile.txt"); 
       myFile.createNewFile(); 
       FileOutputStream fOut = new FileOutputStream(myFile); 
       OutputStreamWriter myOutWriter = 
             new OutputStreamWriter(fOut); 
       myOutWriter.append(textlat.getText()); 

       myOutWriter.close(); 
       fOut.close(); 
       Toast.makeText(getBaseContext(), 
         "Done writing SD 'mysdfile.txt'", 
         Toast.LENGTH_SHORT).show(); 
      } 
      catch (Exception e) 
      { 
       Toast.makeText(getBaseContext(), e.getMessage(), 
         Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    @Override 
    public void onProviderDisabled(String provider) 
    { 

    } 

    @Override 
    public void onProviderEnabled(String provider) 
    { 


    } 

    @Override 
    public void onStatusChanged(String provider, int status, 
      Bundle extras) 
    { 

    }  
} 
} 

: 여기

코드인가? 나는 여기에 정말로 분명한 것을 놓치고 있다고 느낍니다 ...

+3

/SDCARD에 가이드 항목을 확인/확인 될 것입니다. Environment.getExternalStorageDirectory()를 사용하십시오 (항상 SD가 아님) –

+1

허가를 잊지 마십시오 Ankit

+0

적절한 경로를 올바르게 발견하는 것 외에도 최신 장치 , PC 로의 MTP 연결과 같은 방법으로 파일을 사용할 수 있으려면 먼저 미디어 스캐너를 호출해야한다는 것을 잊지 마십시오. –

답변

2

sdcard의 루트 폴더에 쓰려고하지 마십시오. 이것은 보안 문제로 인해 실패합니다. 대신이 시도 :

File dir = Environment.getExternalStoragePublicDirectory(); 
File myFile = new File(dir, "mysdfile.txt"); 

당신은 나중에 디렉토리 dir에서 파일을 찾을 수 있습니다. 앱에서 파일을 비공개로 설정하려면 Environment.getExternalStoragePublicDirectory() 대신 Context.getExternalFilesDir()을 사용하십시오.

이 또한 내가 생각하지 않는다 Storage Options

+0

제안을 구현 한 후에 잘 작동합니다. – user3507697

관련 문제