0

メディア レコーダーと次のコードを使用してオーディオ ファイルを保存しています。

 public class AudioRecorder {

 final MediaRecorder recorder = new MediaRecorder();
 final String path;


  /**
   * Creates a new audio recording at the given path
   */
  public AudioRecorder(String path) {
  this.path = sanitizePath(path);
}

public static String sanitizePath(String path) {
   if (!path.startsWith("/")) {
      path = "/" + path;
   }
   if(path.endsWith("/")){
      path = path + "/";
  }
  return path;
 }

 /**
  * Starts a new recording.
  */
  public void start() throws IOException {
  // make sure the directory we plan to store the recording in exists
  File directory = new File(path).getParentFile();
  if (!directory.exists() && !directory.mkdirs()) {
  throw new IOException("Path to file could not be created.");
 }

   recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
   recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
   recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
   recorder.setOutputFile(path);
   recorder.prepare();
   recorder.start();
  }

 /**
  * Stops a recording that has been previously started.
  */
 public void stop() throws IOException {
 recorder.stop();
 recorder.release();
 }
}

次に、次のコードを使用してこのクラスを呼び出しています

 int timeOfRecroding = AppPrefs.getSettingsAdditionalTimeOfRecording() * 60 * 1000;
        ContextWrapper cw = new ContextWrapper(getApplicationContext());
    File directory = cw.getDir("media", Context.MODE_PRIVATE);

    final String pathAndName = AudioRecorder.sanitizePath(directory.getAbsolutePath() + "/LocRec.3gp");
    final AudioRecorder audioRecorder = new AudioRecorder(pathAndName);

    if(Constants.isTest){
        showToast("Starting recording for [" + AppPrefs.getSettingsAdditionalTimeOfRecording() + "] minutes");
        showToast("Recording to path: [" + pathAndName + "]");

    }

そしてもちろん audioRecorder.start(); を使用します。および audioRecorder.stop(); 実際にレコーディングを行う

記録が完了したら、同じ pathAndName を使用してファイルを取得し、次のコードを使用して電子メールの添付ファイルとして送信し、ファイルを取得します。

new File(new URI(AppPrefs.getInfoToSend(Constants.SERVICE_CODE_SEND_RECORDING, Constants.MESSAGE_TYPE_EMAIL)))

しかし、これは例外を投げています

URI is not absolute: /data/data/com.testrecoding.record/app_media/LocRec.3gp

助けていただければ幸いです, ありがとう, ワシム

4

1 に答える 1

0

ばかげているように聞こえるかもしれませんが、実際にはターンアラウンドではなく、ターンアラウンドを見つけました。最初にそれを見逃した方法がわからず、URIを使用せずにパスから直接ファイルを取得しました

 new File("PathOfFIle")
于 2013-03-08T23:58:19.990 に答える