2013-04-29 3 views
0

Im пытается разработать приложение для записи звука, где я могу начать и остановить запись. Логически, он должен создать аудиофайл с сохраненным аудио. К сожалению, когда я проверяю файл, вместо него нет звука. Поэтому я не очень уверен, где неправильно в кодах.Невозможно сохранить аудиофайл, пустую папку

Это мой основной класс звукозаписи.

package com.example.soundrecorder; 

    import java.io.File; 
    import java.io.IOException; 

    import android.app.Activity; 
    import android.content.ContentResolver; 
    import android.content.ContentValues; 
    import android.content.Intent; 
    import android.media.MediaRecorder; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.os.Environment; 
    import android.provider.MediaStore; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.Toast; 

    public class SoundRecorder extends Activity { 

    MediaRecorder recorder; 
    File audiofile = null; 
    private static final String TAG = "SoundRecordingActivity"; 
    private View startButton; 
    private View stopButton; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    startButton = findViewById(R.id.start); 
    stopButton = findViewById(R.id.stop); 
    } 

    public void startRecording(View view) throws IOException { 

    startButton.setEnabled(false); 
    stopButton.setEnabled(true); 

    File sampleDir = Environment.getExternalStorageDirectory(); 
    try { 
     audiofile = File.createTempFile("sound", ".3gp", sampleDir); 
    } catch (IOException e) { 
     Log.e(TAG, "sdcard access error"); 
     return; 
    } 
    recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(audiofile.getAbsolutePath()); 
    recorder.prepare(); 
    recorder.start(); 
    } 

    public void stopRecording(View view) { 
    startButton.setEnabled(true); 
    stopButton.setEnabled(false); 
    recorder.stop(); 
    recorder.release(); 
    addRecordingToMediaLibrary(); 
    } 

    protected void addRecordingToMediaLibrary() { 
    ContentValues values = new ContentValues(4); 
    long current = System.currentTimeMillis(); 
    values.put(MediaStore.Audio.Media.TITLE, "audio" + audiofile.getName()); 
    values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current/1000)); 
    values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp"); 
    values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath()); 
    ContentResolver contentResolver = getContentResolver(); 

    Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Uri newUri = contentResolver.insert(base, values); 

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri)); 
    Toast.makeText(this, "Added File " + newUri, Toast.LENGTH_LONG).show(); 
    } 
    } 

Существует мой soundrecorder манифеста

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.soundrecorder" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15" /> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.RECORD_AUDIO" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
     android:name=".SoundRecorder" 
     android:label="@string/app_name" > 
     <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

    </manifest> 

ответ

0

Во-первых, вам необходимо определить:

MediaRecorder mrec = new MediaRecorder(); 
File sampleDir = Environment.getExternalStorageDirectory(); 
File audiofile = File.createTempFile("ibm", ".mp4", sampleDir); 

после, необходимо определить функцию FileProcessing:

protected void processaudiofile() 
{ 
    ContentValues values = new ContentValues(3); 
    long current = System.currentTimeMillis(); 
    values.put(MediaStore.Audio.Media.TITLE, "audio" + audiofile.getName()); 
    values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current/1000)); 
    //values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp"); 
    values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mp4"); 
    values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath()); 
    ContentResolver contentResolver = getContentResolver(); 

    Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Uri newUri = contentResolver.insert(base, values); 

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri)); 
} 

используйте оба и убедитесь, что все будет работать. p roperly.

спокойной ночи.

+0

Мне нужно что-то заменить? или просто скопировать и вставить его в мои коды? –

+0

Я вставил коды, но, тем не менее, я получаю эту ошибку. Конструктор по умолчанию не может обрабатывать тип исключения IOException, созданный неявным супер-конструктором. Необходимо определить явный конструктор в строке file.createtempfile –

Смежные вопросы