Созданная папка Android API 23 mkdir отображается как один файл в проводнике Windows

Итак, в основном я создаю папку с помощью mkdir, а затем записываю в эту папку простой текстовый файл. В качестве последнего шага я использую MediaScannerConnection.ScanFile, чтобы сделать их видимыми для проводника.

Папка и текстовый файл видны в моем проводнике на моем телефоне Android. При подключении телефона к моему компьютеру с Windows 10 через USB с использованием MTP я вижу все остальные папки, но моя вновь созданная папка отображается как один файл, без расширений , размер 4 КБ.

Перезапуск смартфона и компьютера не решает проблему, но когда я переименовываю папку в проводнике Android, а затем перезагружаю телефон, она отображается как обычная папка в проводнике Windows.

Приложение показывает диалоговое окно после нажатия кнопки со списком файлов, которые можно выбрать для перезаписи, текстом редактирования для ввода нового имени файла, кнопками «отрицательно» и «положительно».

Вот код:

 /*
Save Config in a File stored in interal storage --> which is emulated as external storage 0
Shows a Dialog window with the option to select a file which is already there or type in a name for a new file or choose from a list of files 
--> save the new file or cancel the dialog
*/
public void savebutton(View view) {

        try {
            // Instantiate an AlertDialog with application context this
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            //External Storage storage/emulated/0/Config --> storage/emulated/0 is internal storage emulated as sd-card
            dir = new File(Environment.getExternalStorageDirectory() + folder);
            if (!dir.exists()) {
                if (!dir.mkdir()) { //create directory if not existing yet
                    Log.d(MainActivity.LOG_TAG, "savebutton: directory was not created");
                }
            }

            //set title of dialog
            builder.setTitle("Save Configuration in Text File");
            //Add edittext to dialog
            final EditText input = new EditText(ConfigActivity.this);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT);
            input.setLayoutParams(lp);
            input.setImeOptions(EditorInfo.IME_ACTION_DONE);        // instead of a RETURN button you get a DONE button
            input.setSingleLine(true);                              // single line cause more lines would change the layout
            java.util.Calendar c = java.util.Calendar.getInstance();
            int day = c.get(java.util.Calendar.DAY_OF_MONTH);
            int month = c.get(java.util.Calendar.MONTH) + 1;
            int year = c.get(java.util.Calendar.YEAR);
            String date = Integer.toString(day) + "." + Integer.toString(month) + "." + Integer.toString(year);
            String savename = name + "-" + date;
            input.setText(savename);

            //Append term + "=" + value --> like LevelOn=50
            for (int itemcounter = 0; itemcounter < value.length; itemcounter++)
                datastring += (term[itemcounter] + "=" + getvalue(itemcounter) + "\n");

            //File List of already stored files for dialog
            mFilelist = dir.list();
            builder.setItems(mFilelist, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                    mChosenFile = mFilelist[which]; // the item/file which was selected in the file list

                    try {
                        //Create text file in directory /Pump Config Files
                        File file = new File(dir.getAbsolutePath(), mChosenFile);
                        //create bufferedwrite with filewriter
                        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                        //write to file --> an existing file will be overwritten
                        bw.write(datastring);
                        //Flush bufferedwriter
                        bw.close();
                        //LOG
                        System.out.println("Wrote to file");
                        //Show a message
                        Toast.makeText(getApplicationContext(), "Saved data", Toast.LENGTH_SHORT).show();

                        // initiate media scan -->cause sometimes created files are nt shown on computer when connected to phone via USB
                        // restarting the smartphone or rename folder can help too
                        // make the scanner aware of the location and the files you want to see
                        MediaScannerConnection.scanFile(
                                getApplicationContext(),
                                new String[]{dir.getAbsolutePath()},
                                null,
                                new MediaScannerConnection.OnScanCompletedListener() {
                                    @Override
                                    public void onScanCompleted(String path, Uri uri) {
                                        Log.v("LOG", "file " + path + " was scanned successfully: " + uri);
                                    }
                                });
                    } catch (Exception e) {
                        System.out.print(e.toString());
                    }
                    //dismissing the dialog
                    dialog.cancel();
                    dialog.dismiss();
                }
            });

            // Get the AlertDialog from builder create()
            AlertDialog dialog = builder.create();
            //Set dialog view/layout
            dialog.setView(input);

            //Add positive button to dialog
            //When pressing the positive button a file with the specified name and configurtion is stored on internal storage
            dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Save", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        filename = input.getText().toString();
                        //Create text file in directory /Pump Config Files
                        File file = new File(dir.getAbsolutePath(), filename + ".txt");
                        //create bufferedwrite with filewriter
                        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                        //write to file --> an existing file will be overwritten
                        bw.write(datastring);
                        //Flush bufferedwriter
                        bw.close();
                        //LOG
                        System.out.println("Wrote to file");
                        //Show a message
                        Toast.makeText(getApplicationContext(), "Saved data", Toast.LENGTH_SHORT).show();
                    } catch (Exception e) {
                        System.out.print(e.toString());
                    }
                    // initiate media scan -->cause sometimes created files are nt shown on computer when connected to phone via USB
                    // restarting the smartphone or rename folder can help too
                    // make the scanner aware of the location and the files you want to see
                    MediaScannerConnection.scanFile(
                            getApplicationContext(),
                            new String[]{dir.getAbsolutePath()},
                            null,
                            new MediaScannerConnection.OnScanCompletedListener() {
                                @Override
                                public void onScanCompleted(String path, Uri uri) {
                                    Log.v("LOG", "file " + path + " was scanned successfully: " + uri);
                                }
                            });

                    dialog.cancel();
                    dialog.dismiss();
                }
            });

            //Add negative button
            dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            //show the save dialog
            dialog.show();
        } catch (Exception e) {
            System.out.print(e.toString());
        }
    }

Протестировано на Android API 23 и API 21. Отлично работает на 21, но не на 23.


person Orti    schedule 20.09.2016    source источник
comment
Log.d(MainActivity.LOG_TAG, "savebutton: directory was not created");. Вы забыли оператор возврата после этого оператора.   -  person greenapps    schedule 20.09.2016
comment
new String[]{dir.getAbsolutePath()},. Вместо этого вы должны позволить сканировать файл: new String[]{file.getAbsolutePath()},.   -  person greenapps    schedule 20.09.2016


Ответы (1)


Спасибо, greenapps,

новая строка [] {dir.getAbsolutePath()},. Вместо этого вы должны разрешить сканирование файла: new String[]{file.getAbsolutePath()},

работает отлично.

Мне всегда не хватает таких мелких деталей.

person Orti    schedule 21.09.2016