Java 仅在触发打开摄像机的意图后打开设备摄像机

Java 仅在触发打开摄像机的意图后打开设备摄像机,java,android,c++,android-intent,android-camera,Java,Android,C++,Android Intent,Android Camera,我有一个场景,在这个场景中,我通过下面的代码激发了打开相机的意图 if(isCameraInUse()) return; Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); mImageFile = getOutputFromCamera(); Uri tempuri = Uri.fromFile(mImageFile); i.putExtra(MediaStore.EXTRA_OUTPUT, tempuri);

我有一个场景,在这个场景中,我通过下面的代码激发了打开相机的意图

if(isCameraInUse())
            return;
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mImageFile = getOutputFromCamera();
Uri tempuri = Uri.fromFile(mImageFile);
i.putExtra(MediaStore.EXTRA_OUTPUT, tempuri);
startActivityForResult(i, 0);

现在,如果我有多个摄像头应用程序,那么我会将所有这些应用程序都视为打开选项。但我只想打开设备摄像头。这可能吗?是否可以触发一个意图指定哪个应用程序应该捕获该意图?

我想你应该创建一个android.hardware.Camera对象。只要调用它的open方法就可以了

在该摄像机上调用open方法Camera=Camera.open;它将创建一个新的摄影机对象以访问特定的硬件摄影机。如果其他应用程序打开同一个摄像头,这将引发RuntimeException

您可以在之前的代码中使用此选项

意向i=新意向MediaStore.ACTION\u IMAGE\u CAPTURE;希望这有帮助。我相信您已经将这些添加到了您的应用程序清单中


如果要启动特定的应用程序,请使用此代码。我希望它能解决你的问题

PackageManager pm = getActivity().getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("camera package name");
startActivity(intent);

您需要在Intent上调用setPackage

i.setPackage("package.name"); 
startActivityForResult(i, 0);
与此相反:

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
这样做:

Intent i = new Intent("com.android.camera");
用软件包的名字来称呼摄像机,我想这会有帮助的