我创建了一个这样的应用程序。它有一个 Button ,单击按钮开始视频捕获。
现在我有一个这样的代码:-
public class VideoCaptureComponentActivity extends Activity implements View.OnClickListener {
VideoView vv;
ImageButton ib;
TextView tv;
Intent i;
final static int cameraData=0;
File path = null;
Uri myVideo;
private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
private Uri fileUri;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vv= (VideoView) findViewById(R.id.vvVideoCapture);
ib=(ImageButton) findViewById(R.id.btnVideo);
ib.setOnClickListener(this);
tv= (TextView) findViewById(R.id.tvFilePath);
}
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.btnVideo:
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri(); // create a file to save the video
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); // set the video image quality to high
// start the Video Capture Intent
startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE)
{
if (resultCode == RESULT_OK)
{
myVideo= data.getData();
tv.setText(myVideo.toString());
vv.setVideoURI(myVideo);
vv.setMediaController(new MediaController(this));
vv.requestFocus();
vv.start();
}
}
}
/** Create a file Uri for saving an image or video */
private static Uri getOutputMediaFileUri()
{
return Uri.fromFile(getOutputMediaFile());
}
/** Create a File for saving an image or video */
private static File getOutputMediaFile()
{
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyCameraApp");
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
File mediaFile;
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_CAPTURED" + ".mp4");
return mediaFile;
}
}
现在,在我捕获视频后,应用程序崩溃了。
07-06 17:12:09.447: E/AndroidRuntime(2917): FATAL EXCEPTION: main
07-06 17:12:09.447: E/AndroidRuntime(2917): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=200, result=-1, data=Intent { }} to activity {com.optimus.mobile.survey/com.optimus.mobile.survey.VideoCaptureComponentActivity}: java.lang.NullPointerException
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.app.ActivityThread.deliverResults(ActivityThread.java:3712)
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3754)
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.app.ActivityThread.access$2800(ActivityThread.java:135)
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2162)
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.os.Handler.dispatchMessage(Handler.java:99)
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.os.Looper.loop(Looper.java:143)
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.app.ActivityThread.main(ActivityThread.java:4914)
07-06 17:12:09.447: E/AndroidRuntime(2917): at java.lang.reflect.Method.invokeNative(Native Method)
07-06 17:12:09.447: E/AndroidRuntime(2917): at java.lang.reflect.Method.invoke(Method.java:521)
07-06 17:12:09.447: E/AndroidRuntime(2917): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
07-06 17:12:09.447: E/AndroidRuntime(2917): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
07-06 17:12:09.447: E/AndroidRuntime(2917): at dalvik.system.NativeStart.main(Native Method)
07-06 17:12:09.447: E/AndroidRuntime(2917): Caused by: java.lang.NullPointerException
07-06 17:12:09.447: E/AndroidRuntime(2917): at com.optimus.mobile.survey.VideoCaptureComponentActivity.onActivityResult(VideoCaptureComponentActivity.java:82)
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.app.Activity.dispatchActivityResult(Activity.java:3931)
07-06 17:12:09.447: E/AndroidRuntime(2917): at android.app.ActivityThread.deliverResults(ActivityThread.java:3708)
07-06 17:12:09.447: E/AndroidRuntime(2917): ... 11 more
基本上问题是
在代码中
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri();
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
这里没有将文件保存到位置集,我不知道是什么问题。我从这个链接http://developer.android.com/guide/topics/media/camera.html 获取了这段代码