Jeff Bootsholz
Jeff Bootsholz

Reputation: 3047

Android saving the audio files into internal storage

Currently I have created the audio-recording Android App. The file is saved at External Storage.

What if I change the method to save as Internal Storage with the context of MODE_PRIVATE

I have read the Android developers about saving files but I have no idea how to convert the file instance into the byte array to save the file and load the audio file

the below is my code to save the audio file

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;
    }
}

the below is my code to load the audio file

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);
        }
    });

Upvotes: 1

Views: 11536

Answers (1)

Arun C
Arun C

Reputation: 9035

Use 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);

For more see Using the Internal Storage

Upvotes: 2

Related Questions