У меня есть сценарий, в котором я запускаю намерение открыть камеру с помощью следующего кода.
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 = Camera.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" />
Если вы хотите запустить определенное приложение, используйте этот код. Я надеюсь, что это решит вашу проблему.
PackageManager pm = getActivity().getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("camera package name");
startActivity(intent);
Вам нужно вызвать setPackage в намерении
i.setPackage("package.name");
startActivityForResult(i, 0);
Вместо этого:
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Сделай это:
Intent i = new Intent("com.android.camera");
Назовите камеру по имени пакета, думаю, что это должно помочь.