2

Androidで音声を録音したいのですが、テスト用の小さなアプリケーションを開発しようとしています。そのため、アプリケーションを実行すると、SDカードに書き込むことができないと表示されたので、コードがあります:

public class MainActivity extends Activity {

 private static final String LOG_TAG_ENREGISTREUR = null;

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


        Button record_btn = (Button)findViewById(R.id.button1);
        Button stop_btn = (Button)findViewById(R.id.button2);
        File fileRecord = null;
        final MediaRecorder media = new MediaRecorder();
        String state = android.os.Environment.getExternalStorageState();
        if(!state.equals(android.os.Environment.MEDIA_MOUNTED)){

            Log.e(LOG_TAG_ENREGISTREUR,"SDcard not found!");
            return;
        }

        File repertoryStockage = Environment.getExternalStorageDirectory();
        if(!repertoryStockage.canWrite()){

            Log.e(LOG_TAG_ENREGISTREUR,"Impossible , you can't write");

            return;
        }

        try {

            fileRecord = File.createTempFile("RecordingAudio", ".mp4",repertoryStockage);
        } catch (Exception e) {
            Log.e(LOG_TAG_ENREGISTREUR,"Probleme E/S before recording");
            return;
        }
        media.setAudioSource(MediaRecorder.AudioSource.MIC);
        media.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        media.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        media.setOutputFile(fileRecord.getAbsolutePath());

        record_btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                try {
                    media.prepare();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                media.start();

            }
        });

        stop_btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {



                media.stop();
                media.release();

            }
        });
    }



}

マニフェストにアクセス許可を追加します。

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

もう1つ、SDカードを作成し、それを次のようにエミュレータに追加します: -sdcard "[SDカードのパス]" では、何が問題なのですか?

4

1 に答える 1

1

さて、このコードは私にとってはうまくいきます..だから、エミュレータで間違って設定したものかもしれません. SDK レベル 15 (4.0.3) を使用しました。

tryブロックを次のログに置き換えてみてくださいImpossible, You can't write

File repertoryStockage = Environment.getExternalStorageDirectory();
File sample = new File(repertoryStockage,"empty.txt"); 
try
{
    sample.createNewFile();
} catch (IOException e) {
    e.printStackTrace();
}
if(!sample.canWrite()){

    Log.e(LOG_TAG_ENREGISTREUR,"Impossible , you can't write");
    return;
}
sample.delete();

ディレクトリの書き込み権限を確認できないことを示す場所がいくつか見つかりました。この回答を参照してください (コードは主にその回答からのものです): Checking for write access in a directory before creating files inside it

しかし、冒頭で述べたように、コードは変更しなくても機能します。

于 2012-07-18T00:40:27.047 に答える