仅在触发打开相机的意图后打开设备相机

时间:2015-02-06 13:31:34

标签: 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);
startActivityForResult(i, 0);

现在,如果我有多个相机应用程序,那么我会看到所有这些应用程序都可以打开。但我只想打开设备相机。这可能吗?是否可以触发一个意图,指明哪个应用程序应该捕获该意图?

4 个答案:

答案 0 :(得分:0)

我猜你应该创建一个android.hardware.Camera的对象。只需调用它的open方法就能为你完成工作。

Camera camera = Camera.open();上调用open()方法,它将创建一个新的Camera对象来访问特定的硬件摄像头。如果其他应用程序打开了同一个摄像头,则会抛出RuntimeException。

您可以在

之前的代码中使用它

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);希望这会有所帮助。我相信您已将这些添加到您的应用程序的清单中。

 <uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您需要在Intent上调用setPackage

i.setPackage("package.name"); 
startActivityForResult(i, 0);

答案 3 :(得分:0)

而不是:

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

这样做:

Intent i = new Intent("com.android.camera");

通过包装名称调用相机认为它应该有帮助。