android - 需要在根 SD 卡中找到 .txt 文件的位置

标签 android gps

每次位置发生变化时,我都试图将经度和纬度值写入文本文件。其结果应该是一个存储在 SD 卡上的文本文件,其中包含经度和纬度值列表。应用成功获取经纬度,弹​​出toast提示文件保存成功。但是,我在SD卡的根目录下找不到文本文件。

代码如下:

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 中找到该文件。如果您希望该文件对您的应用程序是私有(private)的,请使用 Context.getExternalFilesDir()而不是 Environment.getExternalStoragePublicDirectory()

另请查看有关 Storage Options 的指南主题

关于android - 需要在根 SD 卡中找到 .txt 文件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22918724/

相关文章:

android - LocationListener 适用于模拟器,不适用于手机

android - GPS 状态的广播接收器?

android - C2DM 到谷歌云消息传递 (GCM)

android - 最佳实践 : AdMob ads at top or bottom?

android:layout_span 没有在 eclipse 中显示

java - 查找字符串中的子字符串(HTML、Android)

java - 如何在 SQLite android 中管理列表?

android - 如何在Android上使位置稳定

将 unix 时间转换为可读时间

android - 如何获取从网站远程触发的移动用户的 GPS 位置