调用录音机和摄像机后得到结果有问题

时间:2011-08-20 09:42:07

标签: android sqlite

我想捕获3种类型的媒体:音频,视频或图片,然后将其路径写入数据库。以下是代码:

switch(capture_type){
    case audiocapture:
        Intent intentA = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
        startActivityForResult(intentA, ACTIVITY_RECORD_SOUND);
    break;

    case videocapture:
        Intent intentV = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        startActivityForResult(intentV, ACTIVITY_RECORD_VIDEO);
        break;

    case piccapture:
        Intent intentP = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intentP, ACTIVITY_RECORD_PIC);
        break;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case ACTIVITY_RECORD_SOUND:
            if (resultCode==RESULT_CANCELED)
                Log.e("NewScreen.java","intent didn't return any result, or crashed during its operation..");

            try{ContentValues values = new ContentValues();
                values.put("audiouri", data.getDataString());
                values.put("videouri","NULL" );
                values.put("picuri", "NULL");
                myDB.insertOrThrow("Tag", null, values);
    }catch(Exception ex){
                Log.e("NewScreen.java", ex.toString());
            }
            break;

        case ACTIVITY_RECORD_VIDEO:
            if (resultCode==RESULT_CANCELED)
                Log.e("NewScreen.java","intent didn't return any result, or crashed during its operation..");

            try{ContentValues values = new ContentValues();
        values.put("audiouri","NULL" );
                values.put("videouri",data.getDataString());
                values.put("picuri", "NULL");
                myDB.insertOrThrow("Tag", null, values);
                catch(SQLException e)
            }catch(Exception ex){
                Log.e("NewScreen.java", ex.toString());
            }
            break;

        case ACTIVITY_RECORD_PIC:
            if (resultCode==RESULT_CANCELED)
                Log.e("NewScreen.java","intent didn't return any result, or crashed during its operation..");

            try{ContentValues values = new ContentValues();
                values.put("audiouri", "NULL");
                values.put("videouri","NULL" );
                values.put("picuri", data.getDataString());
                try{Log.d("NewScreen.java","now going to insert values in table..");
                    myDB.insertOrThrow("Tag", null, values);
                }catch(SQLException e){Log.e("NewScreen.java", e.toString());}
                    Log.d("NewScreen.java","pic successfully inserted in table");
            }catch(Exception ex){
                    Log.e("NewScreen.java", ex.toString());
            }
            break;
    }
 }

现在有一个有趣的案例,所有3个表现不同。以下是结果:

  1. ACTIVITY_RECORD_SOUND:resultCode等于'RESULT_CANCELED'

  2. ACTIVITY_RECORD_VIDEO:完美地工作

  3. ACTIVITY_RECORD_PIC:resultCode NOT 等于'RESULT_CANCELED'但 picuri = null ..

  4. 声音和图像捕捉有什么问题?怎么解决呢?

1 个答案:

答案 0 :(得分:0)

对于图片:尝试在startActivityForResult之前提前使用所需的输出文件Uri设置额外数据:

intentP.putExtra(MediaStore.EXTRA_OUTPUT, <your_Uri>);

声音与此相同。录音机应用程序启动但在startActivityForResult调用后立即收到取消。转载于Asus Transformer,Honeycomb 3.2。 你在使用什么测试环境?你什么时候收到结果?