【问题标题】:Open device camera only after firing intent for opening camera仅在触发打开相机的意图后打开设备相机
【发布时间】:2015-02-06 13:31:34
【问题描述】:

我有一个场景,我通过以下代码触发打开相机的意图。

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);

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

【问题讨论】:

    标签: java android c++ android-intent android-camera


    【解决方案1】:

    我猜你应该创建一个 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" />
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        你需要在 Intent 上调用 setPackage

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

        【讨论】:

          【解决方案4】:

          而不是这个:

          Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          

          这样做:

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

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

          【讨论】:

            猜你喜欢
            • 2018-06-06
            • 2013-05-23
            • 2021-02-08
            • 1970-01-01
            • 1970-01-01
            • 2017-05-24
            • 2013-07-24
            • 2011-12-22
            • 1970-01-01
            相关资源
            最近更新 更多