0

そのユーザーが音声を録音できるアプリを作成しています。これにはオーディオ インテントを使用しました。私がやろうとしているのは、オーディオを録音し、その名前を設定して、フォルダーに保存することです。私のコードでは、オーディオは保存され、適切に名前が付けられていましたが、再生しようとすると、「申し訳ありませんが、再生できません」と表示されます。どこが間違っているのかわかりません。助けてください、本当に感謝します。ありがとう。

これが私のコードです:

.....
private void dispatchTakeAudioIntent(int actionCode) 
{
    Intent takeAudioIntent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);

    File a = null;
    try {
            a = setUpAudioFile();
            mCurrentAudioPath = a.getAbsolutePath();
            takeAudioIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(a));
        } catch (IOException e) 
            {
                e.printStackTrace();
                a = null;
                mCurrentVideoPath = null;
            }
    startActivityForResult(takeAudioIntent, ACTION_TAKE_AUDIO);


}

 private File setUpAudioFile() throws IOException {

    File v = createAudioFile();
    mCurrentVideoPath = v.getAbsolutePath();

    return v;
}

private File createAudioFile() throws IOException 
{
    // Create an audio file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String audioFileName = AUDIO_FILE_PREFIX + timeStamp + "_";
    File albumF = getAlbumDir();
    File audioF = File.createTempFile(audioFileName, AUDIO_FILE_SUFFIX, albumF);
    return audioF;
}

private void galleryAddAudio() 
{
    Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE");
    File f = new File(mCurrentAudioPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case ACTION_TAKE_PHOTO: 
    {
        if (resultCode == RESULT_OK) 
        {
            handleBigCameraPhoto();
            dispatchTakePictureIntent(ACTION_TAKE_PHOTO);

        }

        break;

    }
    case ACTION_TAKE_AUDIO: 
    {
        if (resultCode == RESULT_OK) {

            //audioFileUri = data.getData();
            handleAudio(data);
            //galleryAddVideo();
        }
        break;
    } 
    } // switch
}

private void handleAudio(Intent data) {

    audioFileUri = data.getData();
    if (mCurrentAudioPath != null) 
    {
        //audioFileUri = data.getData();
        galleryAddAudio();
        mCurrentAudioPath = null;
    }

}

........
4

1 に答える 1

1

RECORD_SOUND_ACTIONインテントに関しては、オーディオ録音を保存するためのファイル パスの指定がサポートされていないという制限があります。アプリケーションは、オーディオをデフォルトの場所に保存します。MediaStore.EXTRA_OUTPUTは、 MediaStoreのドキュメントでは定数EXTRA_OUTPUTの下に画像と動画のみに使用するように記述されているため、extra として使用することはできません。

The name of the Intent-extra used to indicate a content resolver Uri to be used to store the requested image or video. 

この原因の解決策は少しトリッキーです。アプリケーションにオーディオをデフォルトで保存させることができますが、必要な場所にオーディオを切り取り、貼り付け、名前を変更することができます。ペーストを切る方法を見つけたと主張する2つの回答を見つけました。

ソリューション A

ソリューション B

この回答を受け入れるか、役立つ場合は +1 してください。

于 2014-05-16T14:36:06.313 に答える