2017-02-01 10 views
0

私はAudioRecordクラスを介してマイク入力を使用するAndroidアプリを実装しています。私はAudioRecordインスタンスでrelease()メソッドを呼び出しておらず、アプリケーションを閉じていません。今では別のAudioRecordを初期化することができず、録音オーディオは基本的に他のすべてのアプリケーションでもブロックされています。Android AudioRecordには参照がなくなったときに解放する方法がありますか?

AudioHardwareALSA: error:Input stream already opened for voice recording 

AudioRecordインスタンスが解放される方法はありますか?私が今までに見つけた唯一の方法は、実行可能な解決策ではない電話機を再起動することです。リリース資源の方法で

+0

内のthatsデザインの一部を再設計する必要があります。アプリケーションが例外に遭遇し、 'release()'を呼び出さずに終了した場合、例外を捕捉して 'release'を呼び出す必要があります。このソリューションは、開発/デバッグ処理中にのみ使用し、最終製品の一部としてリリースしないでください。 それ以外の場合は、電話機をリセットするだけです。 – ChickenFeet

+0

紛失参照は設計の一部ではありませんが、意図しない(クラッシュ、例外、誰かが電話からバッテリーを取り出しているなど)可能性があります。いくつかの開発者。適切なリリースソリューションを実装していない可能性があり、そのためシステム全体でオーディオを録音することをブロックします。それで私はAndroidのAudioRecrodの実装に少し不快感を感じます。 –

答えて

1

リリースonDestroyメソッド内のすべてのあなたのresounrces

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    // release resources 
    releaseResources(); 
    visualizerView = null; 
} 

私は何をして記録し、それをキャンセル/ストップ動作しているかどうかを確認し、負け参照がある場合は、すべてのtry catchブロック

+0

他のアプリがAudioRecordを正しくリリースしない場合はどうすればよいですか? –

+0

あなたはインテントを使用しており、オーディオを録音する別のアプリを表示していますか?それともあなた自身のアプリにありますか? –

+0

私に関係のない他のアプリがAudioRecordを適切にリリースしないケースがありました。オーディオレコーディングはシステム全体でブロックされているので、電話を再起動する以外の方法はありません。 –

関連する問題