Reputation: 3047
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
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