Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 有目的地启动摄像机_Android_Video_Permissions_Camera_Android Intent - Fatal编程技术网

Android 有目的地启动摄像机

Android 有目的地启动摄像机,android,video,permissions,camera,android-intent,Android,Video,Permissions,Camera,Android Intent,我正在编写一个非常小的应用程序,只需打开摄像头应用程序即可进行视频拍摄。我可以让我的代码在安卓2.2模拟器上运行,但它不能在我的设备摩托罗拉Droid 1 stock 2.2 FRG22D上运行。你知道我在代码上哪里出错了吗 public class StartVid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedIns

我正在编写一个非常小的应用程序,只需打开摄像头应用程序即可进行视频拍摄。我可以让我的代码在安卓2.2模拟器上运行,但它不能在我的设备摩托罗拉Droid 1 stock 2.2 FRG22D上运行。你知道我在代码上哪里出错了吗

public class StartVid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

final int VIDEO = 1;

    Intent intent = new Intent();
    intent.setClassName("com.android.camera","com.android.camera.VideoCamera");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(intent, VIDEO );
    finish();
看来托尔斯滕是对的。如果我有足够的代表,我会投票支持你的答案。你可以从日志中看到com.android.camera找不到,并抛出一个致命的异常。下面是Logcat

D/dalvikvm(1159):GC_EXTERNAL_ALLOC在66ms内释放251个对象/13456字节 I/ActivityManager(1086):启动活动:Intent{act=android.Intent.action。 MAIN cat=[android.intent.category.LAUNCHER]flg=0x10200000cmp=com.goatpen.Phobo s、 QSVideo/.StartVid} I/ActivityManager(1086):为activity com启动proc com.goatpen.Phobos.QSVideo .goatpen.Phobos.QSVideo/.startvideo:pid=483 uid=10092 gids={}

E/AndroidRuntime(483):java.lang.RuntimeException:无法启动活动Co mponentInfo{com.goatpen.Phobos.QSVideo/com.goatpen.Phobos.QSVideo.StartVid}:和 roid.content.ActivityNotFoundException:找不到显式活动类{ com.android.camera/com.android.camera.VideoCamera};你宣布这项活动了吗 在您的AndroidManifest.xml文件中是否存在重复性?

E/AndroidRuntime(483):原因:android.content.ActivityNotFoundException:U 无法找到显式活动类{com.android.camera/com.android.camera.Vid
eoCamera};您是否在AndroidManifest.xml中声明了此活动?

摩托罗拉已在Droid上安装了自己的摄像头应用程序,因此此活动是不同的。在我的Milestone(Droid的欧洲版)上,课程是com.motorola.Camera.camcoder

这个例子向您展示了,如果Android SDK中没有针对特定任务的通用意图操作,那么您就不能依赖于使用带有固定包和类名字符串的意图机制——不幸的是,调用摄像机就是这种情况。在不同类型的手机上,您需要为摄像机呼叫的活动可能会有所不同(如果用户修改,甚至可能在同一型号的手机中)

但是,您可以通过使用ACTION_camera_按钮发送有序广播来启动默认(静态)摄像头应用程序

                    i = new Intent();
                    i.setFlags( Intent.FLAG_DEBUG_LOG_RESOLUTION);
                    i.setAction(Intent.ACTION_CAMERA_BUTTON);
                    i.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_CAMERA));
                    sendOrderedBroadcast(i, null);

你不会相信这个解决方案是多么容易。首先,摩托罗拉droid的摄像头应用程序是com.google.android.camera。这是标准的android 2.2软件包名称。我使用adb从/data/system/packages.xml中提取文件来确认这一点

此外,还打算在录像机模式下打开摄像头应用程序。意图\行动\视频\捕获

 Intent intent = new Intent("android.media.action.VIDEO_CAMERA");
这是用于在视频模式下调用摄像头应用程序的目的

As;避免使用显式组件名称启动意图,除非它们在应用程序中。这样做可能会破坏不同Android版本中的应用程序

相反,使用

要仅为视频启动摄像头,请执行以下操作:

static final int REQUEST_VIDEO_CAPTURE = 1;

private void dispatchTakeVideoIntent() {
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
}
在ActivityResult上阅读活动的结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
        Uri videoUri = intent.getData();
        mVideoView.setVideoURI(videoUri);
    }
}

你能粘贴你的摩托罗拉公司生产的logcat吗?所以没有办法从一个意图启动摄像机?我只想写一个非常小的应用程序作为摄像机的快捷方式。因为默认设置是在静止相机模式下打开进程。谢谢你的帮助。如果我有足够的rep.P.S.我会更新你的答案。我粘贴了上面日志中的例外。太好了,我今天学到了一些新东西。然而,您所写的意图并不能解决摩托罗拉里程碑2.1-update1的问题。正确的方法是使用SDK常量MediaStore.ACTION\u VIDEO\u CAPTURE,它解析为“android.media.ACTION.VIDEO\u CAPTURE”。感谢您的澄清。如果可以的话,我总是尽量回答我的问题。到目前为止,我喜欢安卓。自从Pascal之后,我没有写过任何代码。面向对象编程和意图对我来说是新的。谢谢你的代表。