文件未保存在真实设备上

时间:2019-07-30 20:25:47

标签: java android android-studio android-emulator

如何查看我在Android手机上创建的文件?

我使用Android Studio创建了一个Android应用程序。一切正常,我可以使用文件浏览器保存并找到保存的文件。但是,当我创建APK时,找不到文件。奇怪的是,我看到了我创建的目录,但是它是空的(应该有 .csv 文件)。

我尝试过的事情:

我在应用程序中使用片段。我创建了一个 write 方法,一个 permission 方法,并在我的 onCreateView 方法中对其进行了调用。我在 AndroidManifest.xml 中具有启用权限。我使用的是How to write files to external public storage in Android so that they are visible from Windows?中的mediaStore方法,但似乎不起作用。 创建我的 .csv 文件(在 write 方法内部)后,立即调用 scanFile 方法。

代码:

AndroidManifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {

    final LayoutInflater lf = getActivity().getLayoutInflater();
    final View rootView = inflater.inflate(R.layout.frag_layout, container, false);

    // Permissions to write
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
            getActivity().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1000);
    }

    // some code

    saveTextAsFile("litchi_mission", myText);
}

写入方法:

// Write and save file
private void saveTextAsFile(String filename, String myText){
    String fileName = filename + ".csv";
    //create file
    File file = new File(getActivity().getExternalFilesDir("mission"), fileName);
    //write file
    try {
        file.createNewFile();
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(myText.getBytes());
        fos.close();
        Toast.makeText(getActivity(), "Saved to :\n" + getActivity().getExternalFilesDir("mission") + "/" + fileName, Toast.LENGTH_LONG).show();

        scanFile(getActivity().getLayoutInflater().getContext(), file, "text/csv");

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }catch (IOException e) {
        e.printStackTrace();
    }
}

权限方法:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch(requestCode){
        case 1000:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Toast.makeText(getActivity(), "Permission granted!", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getActivity(), "Permission denied!", Toast.LENGTH_LONG).show();
                getActivity().finish();
            }
    }
}

MediaStore scanFile方法:

public void scanFile(Context ctxt, File f, String mimeType) {
    MediaScannerConnection.scanFile(ctxt, new String[] {f.getAbsolutePath()}, new String[] {mimeType}, null);
}

结果:

Folder created

But the csv file is not saved

File explorer finds the created csv file

此外,尽管我将自己的手机与APK一起使用,但保存文件时仍然显示 storage / emulated / 0 /... 消息。应该没有模拟器文件夹,对吧?)。

Logcat

这是来自仿真设备的日志猫:

2019-07-31 11:21:10.144 1913-1913/? W/WindowManager: removeWindowToken: Attempted to remove non-existing token: android.os.Binder@a7c62c8
2019-07-31 11:21:53.438 1676-4342/? W/audio_hw_generic: Not supplying enough data to HAL, expected position 3987322 , only wrote 3987152
2019-07-31 11:21:53.466 1696-1873/? D/AF::Track: interceptBuffer: took 211us to intercept 0 tracks
2019-07-31 11:21:53.516 1913-1940/? E/memtrack: Couldn't load memtrack module
2019-07-31 11:21:53.517 1913-1940/? W/android.os.Debug: failed to get memory consumption info: -1
2019-07-31 11:21:53.638 1913-1940/? E/memtrack: Couldn't load memtrack module
2019-07-31 11:21:53.638 1913-1940/? W/android.os.Debug: failed to get memory consumption info: -1
2019-07-31 11:21:53.732 11493-12002/? W/d.process.medi: JNI critical lock held for 19.558ms on Thread[16,tid=12002,Runnable,Thread*=0xe0e33e00,peer=0x12d405e0,"AsyncTask #1"]
2019-07-31 11:21:53.788 1686-1796/? D/gralloc_ranchu: gralloc_alloc: Creating ashmem region of size 868352
2019-07-31 11:21:53.813 11493-12002/? D/MediaProvider: Scanned /storage/emulated/0/Android/data/com.example.flightio/files/mission/litchi_mission.csv as /storage/emulated/0/Android/data/com.example.flightio/files/mission/litchi_mission.csv for null

红色是什么

2019-07-31 11:20:33.596 1913-1940/? E/memtrack: Couldn't load memtrack module
2019-07-31 11:20:33.745 11493-11493/? E/d.process.medi: Not starting debugger since process cannot load the jdwp agent.
2019-07-31 11:31:51.907 1913-1944/? E/BluetoothAdapter: Bluetooth binder is null
2019-07-31 11:31:51.948 1913-1944/? E/KernelCpuSpeedReader: Failed to read cpu-freq: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
2019-07-31 11:32:04.687 1913-2051/? E/ClipboardService: Denying clipboard access to com.google.android.as, application is not in focus neither is a system service for user 0
2019-07-31 11:32:07.593 1838-1838/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2019-07-31 11:32:07.595 1838-1838/? E/netmgr: WifiForwarder unable to open QEMU pipe: Invalid argument

编辑

经过一些测试,方法 saveTextAsFile() 似乎是这些错误的根源。我已经做了一个简单的测试,可以写入一个 txt 文件,但是在我的真实设备上无法正常工作。它可以在仿真设备上运行,但是在logcat中显示相同的错误。

此外,我测试过的每一个编写文件的代码都无法在真实设备上运行...

0 个答案:

没有答案
相关问题