Java 写入日志文件不适用于Android 4.2 Jelly Bean

Java 写入日志文件不适用于Android 4.2 Jelly Bean,java,android,filewriter,android-4.2-jelly-bean,Java,Android,Filewriter,Android 4.2 Jelly Bean,我正在尝试为一个学校项目集成一些代码,该项目将通过蓝牙接收到的传感器值写入逗号分隔的数据日志文件。在尝试了几十个示例之后,我无法获得在Jelly Bean上运行的文件编写功能的简单示例。这段代码在我运行安卓4.0.2的个人设备上运行得非常好。我尝试在motorolla xt1060上运行以下示例,虽然没有可移动sd卡,但我的理解是,这并不排除使用外部存储。我使用linux和MTPFS,以及windows和默认驱动程序在文件系统的任何位置查找文件,但它从未显示出来。当我通过终端安装MTPFS创建文

我正在尝试为一个学校项目集成一些代码,该项目将通过蓝牙接收到的传感器值写入逗号分隔的数据日志文件。在尝试了几十个示例之后,我无法获得在Jelly Bean上运行的文件编写功能的简单示例。这段代码在我运行安卓4.0.2的个人设备上运行得非常好。我尝试在motorolla xt1060上运行以下示例,虽然没有可移动sd卡,但我的理解是,这并不排除使用外部存储。我使用linux和MTPFS,以及windows和默认驱动程序在文件系统的任何位置查找文件,但它从未显示出来。当我通过终端安装MTPFS创建文本文件时,以及当我拍照时,我可以看到文本文件,所以我认为MTP不会导致问题

下面是我编写的最简单的java示例,它适用于4.0而不是4.2:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        path.mkdirs();
        File file = new File(path, "test.txt");
        Log.d("FILE_TEST", file.getPath());

        try {
            Log.d("FILE_TEST", "Creating buffer");
            BufferedWriter buf = new BufferedWriter(new FileWriter(file));
            Log.d("FILE_TEST", "Writing to buffer");
            buf.write("Hello FS!\n");
            Log.d("FILE_TEST", "Flushing buffer");
            buf.flush();
            Log.d("FILE_TEST", "Closing file");
            buf.close();
        } catch (IOException e) {
            Log.d("FILE_TEST","Caught Exception:" + e.toString());
        }
    }
}
清单xml包含以下内容:

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
有人知道为什么这会在4.0而不是4.2上运行吗

/storage/emulated/0/Download/test.txt
根据您的日志,您的文本文件正在写入外部存储器的模拟部分

在安卓4.2中,谷歌增加了多用户支持,并虚拟化了外部存储。这就是它所说的“模拟的”


顺便说一下,你还应该检查教授是否只是为你创建了一个有限的用户帐户。数据计划的缺乏不应该阻止你注册Google Play

今天早上我重新启动手机时,文件系统里堆满了我制作的测试文件。我通过尝试编写其他新文件并尝试从桌面查看这些文件进行了测试,但这些文件只有在重启手机后才可见。仿真不是问题,这是android为多个用户共享驱动器的标准新方式。稍后,我将再次检查Windows上的behvior,以确认这是否是手机的错误,而不仅仅是Linux驱动程序的错误。

代码似乎在4.3上运行良好。你能用设备上的文件浏览器找到文件吗?委托该项目的教授没有数据计划,即使启用了wifi,我也找不到在没有数据连接的情况下注册Google Play的方法。我相当确定那里没有任何东西,我手动在下载中放置了一个文本文件,我可以在linux和windows资源管理器中从MTPFS和gmtp中看到它。这听起来很像MTP可见性问题,如这里描述的(相当糟糕):谢谢,这似乎是问题所在,它可以通过以下程序解决:sendBroadcast(新的Intent(Intent.ACTION\u MEDIA\u SCANNER\u SCAN\u FILE,Uri.fromFile(FILE));
/storage/emulated/0/Download/test.txt