2011-12-11

在 Android 裡呼叫錄音程式(RECORD_SOUND_ACTION)

先說,這個練習失敗了,原因不明。

main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="recordSound"
        android:text="開始錄音" />

</LinearLayout>
MediaRecorderIntentActivity
public class MediaRecorderIntentActivity extends Activity {

    private static final String TAG = "MediaRecorderIntentActivity";
    private MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void recordSound(View v) {
        this.stopPlay();
        Intent it = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
        this.startActivityForResult(it, 1);
    }

    @Override
    public void onPause() {
        super.onPause();
        this.stopPlay();
    }

    private void stopPlay() {
        if (this.mp != null) {
            Log.d(TAG, "停止播放");
            this.mp.stop();
            this.mp.release();
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent it) {
        if (requestCode != 1) {
            Log.d(TAG, "不是錄音");
            return;
        }
        if (resultCode != RESULT_OK) {
            Log.e(TAG, "錄音失敗 - " + resultCode);
            return;
        }
        Uri uri = it.getData();
        Log.d(TAG, "錄音檔:" + uri.getPath());
        this.mp = new MediaPlayer();
        try {
            this.mp.setDataSource(this, uri);
            this.mp.prepare();
            this.mp.start();
            Log.d(TAG, "開始播放...");
        }
        catch (IllegalArgumentException e) {
            Log.e(TAG, e.getMessage(), e);
        }
        catch (SecurityException e) {
            Log.e(TAG, e.getMessage(), e);
        }
        catch (IllegalStateException e) {
            Log.e(TAG, e.getMessage(), e);
        }
        catch (IOException e) {
            Log.e(TAG, e.getMessage(), e);
        }
    }
}
開啟錄音程式與錄音都沒問題,一直到呼叫 onActivityResult 後得到 resultCode 卻不是 RESULT_OK,而是令人不解的 RESULT_CANCELED(0),即使加上 android.permission.WRITE_EXTERNAL_STORAGE 權限也不行,事實上也找不到錄音檔在哪。

相關文章

1 則留言:

  1. 我在小米2上也遇到了这个问题,在其他手机上resultCode都是-1,唯独小米2是0,奇怪

    回覆刪除