Android 需要在根SD卡中找到.txt文件的位置
每次位置更改时,我都试图将经度和纬度值写入文本文件。其结果应该是一个文本文件,存储在SD卡上,其中包含经度和纬度值列表。应用程序成功获取经度和纬度,并弹出toast通知,说明文件已成功保存。但是,我在SD卡的根目录中找不到文本文件 代码如下:Android 需要在根SD卡中找到.txt文件的位置,android,gps,Android,Gps,每次位置更改时,我都试图将经度和纬度值写入文本文件。其结果应该是一个文本文件,存储在SD卡上,其中包含经度和纬度值列表。应用程序成功获取经度和纬度,并弹出toast通知,说明文件已成功保存。但是,我在SD卡的根目录中找不到文本文件 代码如下: import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import android.location.Location; impo
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)
{
}
}
}
基本上,带位置值的文件在哪里?我觉得我在这里遗漏了一些非常明显的东西…您不应该尝试写入SD卡的根文件夹。由于安全问题,此操作将失败。请尝试以下方法:
File dir = Environment.getExternalStoragePublicDirectory();
File myFile = new File(dir, "mysdfile.txt");
然后,您可以在目录dir
中找到该文件。如果您希望该文件对应用程序是私有的,请使用而不是Environment.getExternalStoragePublicDirectory()
另外,请查看上的指南主题,我认为/sdcard/不合适。使用Environment.getExternalStorageDirectory()(不一定是SD!)从一个较旧的问题中检查这一点:在较新的设备上,除了正确发现适当的路径外,不要忘记获得权限,不要忘记,在文件通过MTP连接到PC等方式可用之前,您需要调用媒体扫描仪。在实施您的建议后,工作正常。