0

したがって、基本的には mkdir でフォルダーを作成し、そのフォルダーに単純なテキスト ファイルを書き込みます。最後のステップとして、MediaScannerConnection.ScanFile を使用してファイル エクスプローラーで表示できるようにします。

フォルダーとテキスト ファイルの両方が、Android フォンのファイル エクスプローラーに表示されます。MTP を使用して USB 経由で電話を Windows 10 コンピューターに接続すると、他のすべてのフォルダーが表示されますが、新しく作成したフォルダーは単一のファイルとして表示され、拡張子はありません。 、4KBサイズ。

スマートフォンとコンピューターを再起動しても問題は解決しませんが、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 では動作しません。

4

1 に答える 1

1

greenapps さん、ありがとうございます。

new String[]{dir.getAbsolutePath()},. 代わりにファイルをスキャンする必要があります: new String[]{file.getAbsolutePath()},

正常に動作します。

私はいつもこのような小さな詳細を見逃しています。

于 2016-09-21T08:06:21.793 に答える