碎片中的mediaRecorder,prepare()失败,状态4无效

时间:2014-04-20 22:23:17

标签: android android-fragments mediarecorder

我的录音机停在我的prepare()行。 Log cat对start()行说“无效状态4”,这意味着我的输出文件似乎有问题。我用

实现了我的输出文件
mFileName = Environment.getExternalStorageDirectory() + "/lastConversateRecord.3gp";

My Expression-Watchguard为mFileName显示“/mnt/sdcard/lastConversateRecord.3gp”,这听起来不错。

我的音频录音机在定期活动中工作,但自从我改为片段后就开始了。

我在清单中提供了Record_Audio + WRITE_EXTERNAL_STORAGE权限。

这是我的代码 - 你有提示吗?谢谢!

public class Fragment_2 extends SherlockFragment{

private MediaRecorder mRecorder = null;
private String mFileName;
private String TAG = "App";


  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_2, container, false);


     Button r1 = (Button) view.findViewById(R.id.record);  


        r1.setOnClickListener(new View.OnClickListener() {
            @Override
          public void onClick(View v) {

            //mFileName = getActivity().getExternalCacheDir() + File.separator + System.currentTimeMillis() + ".3gp";

            mFileName = Environment.getExternalStorageDirectory() + "/lastConversateRecord.3gp";

            Log.d(TAG, "Record started");
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(mFileName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

            try {
                mRecorder.prepare();
            } catch (IOException e) {
                Log.e(TAG, "prepare() failed");
            }

            mRecorder.start();
    }

    });

    return view;

  }
}

2 个答案:

答案 0 :(得分:0)

解决方案:我必须在SD卡上提供我的模拟器空间。

答案 1 :(得分:0)

问题在于应用程序不请求权限

在清单中使用

<item android:state_checked="true"
    >
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
        <corners
            android:radius="8dp"
            />
        <solid
            android:color="#514b4b"
            />
        <size
            android:width="85dp"
            android:height="85dp"
            />
    </shape>
</item>

<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <corners
        android:radius="8dp"
        />
    <solid
        android:color="#EAEAEA"
        />
    <size
        android:width="85dp"
        android:height="85dp"
        />
    </shape>
</item>

您的活动

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

还有

import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;

后来

public static final int REQUEST_AUDIO_PERMISSION_CODE=1;

我希望它有用:)