1

目前我已经创建了录音 Android 应用程序。该文件保存在外部存储中。

如果我将方法更改为使用 MODE_PRIVATE 的上下文保存为内部存储怎么办

我已阅读有关保存文件的 Android 开发人员,但我不知道如何将文件实例转换为字节数组以保存文件并加载音频文件

以下是我保存音频文件的代码

public void onClick(View view) throws Exception {
    if (count == 0) {

        tbxRecordStatus.setText("Record");
        btnRecord.setText("Stop Record");

        Toast.makeText(MainActivity.this, "Recording Starts",
                Toast.LENGTH_SHORT).show();
        dateInString = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(
                new Date()).toString();
        String fileName = "TVSSSSD_" + dateInString + " record.3gp";

        SDCardpath = Environment.getExternalStorageDirectory();
        myDataPath = new File(SDCardpath.getAbsolutePath()
                + "/.My Recordings");

        // mydir = context.getDir("media", Context.MODE_PRIVATE);
        if (!myDataPath.exists())
            myDataPath.mkdir();


        audiofile = new File(myDataPath + "/" + fileName);

        Log.d("path", myDataPath.getAbsolutePath());
        // File fileWithinMyDir = new File(mydir, fileName);
        // audiofile = fileWithinMyDir;
        // FileOutputStream out = new FileOutputStream(fileWithinMyDir);

        recorder = new MediaRecorder();
        recorder.reset();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setAudioEncodingBitRate(16);
        recorder.setAudioSamplingRate(44100);

        recorder.setOutputFile(audiofile.getAbsolutePath());

        recorder.prepare();

        recorder.start();

        count++;

    } else {

        tbxRecordStatus.setText("Stop");
        btnRecord.setText("Start Record");
        Toast.makeText(MainActivity.this, "Recording Stops",
                Toast.LENGTH_SHORT).show();
        if (recorder != null) {
            recorder.stop();
            recorder.release();

            recorder = null;

        } else {
            tbxRecordStatus.setText("Warning!");
            Toast.makeText(MainActivity.this, "Record First",
                    Toast.LENGTH_SHORT).show();
        }
        count = 0;
    }
}

以下是我加载音频文件的代码

recordList = new ArrayList<String>();
    File directory = Environment.getExternalStorageDirectory();
    file = new File(directory + "/My Recordings");
    File list[] = file.listFiles();
    for (int i = 0; i < list.length; i++) {
        recordList.add(list[i].getName());
    }

    Collections.sort(recordList, Collections.reverseOrder());

    listview = (ListView) findViewById(R.id.listView);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1,
            recordList);


    listview.setAdapter(adapter);

    listview.setTextFilterEnabled(true);

    listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long arg3) {
            // TODO Auto-generated method stub


            String product = ((TextView) view).getText().toString();
            String fullPathAudio = file.getAbsolutePath() + "/" + product;

            File resultFile = new File(fullPathAudio);

            Intent intent = new Intent();
            intent.setAction(android.content.Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(resultFile), "audio/*");
            startActivity(intent);
        }
    });
4

1 回答 1

2

利用getFilesDir()

 SDCardpath = getFilesDir();
        myDataPath = new File(SDCardpath.getAbsolutePath()
                + "/.My Recordings");

        // mydir = context.getDir("media", Context.MODE_PRIVATE);
        if (!myDataPath.exists())
            myDataPath.mkdir();


        audiofile = new File(myDataPath + "/" + fileName);

有关更多信息,请参阅使用内部存储

于 2013-05-03T05:27:47.127 回答