【问题标题】:MediaRecorder, I can't write on SDcardMediaRecorder,我无法在 SD 卡上写入
【发布时间】:2012-07-16 23:09:38
【问题描述】:

我想在android中录制语音,我尝试开发一个小应用程序进行测试,所以我运行我的应用程序它告诉我我不能在sdcard上写,所以有我的代码:

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();

            }
        });
    }



}

我在 Manifest 中添加权限:

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

我创建了一个 SD 卡并将其添加到模拟器中:-sdcard "[Path of sdcard]" 那么问题是什么?

【问题讨论】:

    标签: android


    【解决方案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

    但正如我一开始所说,代码对我有效,无需任何更改。

    【讨论】:

    • 我检查了DDMS > mnt > sdcard,我发现没有写或读的权限,所以你知道如何改变它吗?我认为这是问题
    • 哦,谢谢你的回答,问题就像我之前说的“SDCARD WITHOUT PERMISSIONS”所以我关注了这个link,我解决了这个问题
    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多