1

理由はわかりませんが、start()メソッドがエラーをスローしてアプリをクラッシュさせます。

public class Noise extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.noise);
    MediaRecorder recorder=new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    try{
        recorder.prepare();
    }catch(IllegalStateException e){
        Log.d("Error",e.toString());
        e.printStackTrace();
    }catch(IOException e){
        Log.d("Error",e.toString());
        e.printStackTrace();
    }
    recorder.start();
    Timer timer=new Timer();
    timer.scheduleAtFixedRate(new RecorderTask(recorder), 0, 500);
}
private class RecorderTask extends TimerTask{
    TextView risultato=(TextView) findViewById(R.id.risultato_recorder);
    private MediaRecorder recorder;
    public RecorderTask(MediaRecorder recorder){
        this.recorder = recorder;
    }
    public void run(){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                risultato.setText("" + recorder.getMaxAmplitude());
            }
        });
    }
}
}

準備と開始を削除すると、機能しますが、テキストビューでは常に0が返されます。誰かが私を助けることができますか?このことは私を夢中にさせる

これはlogcatです:https ://dl.dropbox.com/u/16047047/log.txt

そして電話では、それはクラッシュします。

4

3 に答える 3

3

見逃しているようです。recorder.setOutputFile(PATH_NAME);のドキュメントを参照してください。MediaRecorder

少なくとも、これはスタックトレースが示すことです。

11-29 16:04:08.933: W/System.err(9323): java.io.IOException: No valid output file

これは、以下に関連するソースコードですMediaRecorder.prepare()

public void prepare() throws IllegalStateException, IOException
{
    if (mPath != null) {
        FileOutputStream fos = new FileOutputStream(mPath);
        try {
            _setOutputFile(fos.getFD(), 0, 0);
        } finally {
            fos.close();
        }
    } else if (mFd != null) {
        _setOutputFile(mFd, 0, 0);
    } else {
        throw new IOException("No valid output file");
    }
    _prepare();
}

(grepcodeで読み取ることFileができます)オブジェクトとがのFileDescriptor両方の場合、例外がスローされますnull。ですから、ファイルを提供せずに使用することはできないと思いMediaRecorderます。トリッキーなことを試すことはできますが/dev/null、それが機能するかどうかはわかりません。現在、テストすることはできません。

于 2012-11-29T15:10:19.217 に答える
1

start()1回はActivityonCreate()で、もう1回はRecorderTaskコンストラクターで2回呼び出しているようです。必要なのは1つだけです。スタックトレースのように、どのようにクラッシュするかを知らなければ、これ以上知ることは困難です。

于 2012-11-29T14:59:52.363 に答える
1

同様の問題がmediaRecoder.setOutputFormat(value)この投稿を確認してくださいhttps://stackoverflow.com/a/372​​32920/3533092で発生する可能性があります

于 2016-05-14T23:30:11.333 に答える