2013-09-03 2 views
8

Я хотел бы запустить камеру по умолчанию, но хочу, чтобы она действовала так, как будто она была запущена из панели запуска (т. Е. Результирующее изображение должно храниться в приложении камеры в галерее пользователя, а не возвращаться в мое приложение). Если я использую Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);, приложение камеры использует интерфейс «OK? Retry?» - UI и не сохраняет изображение. Я бы предпочел не использовать «прямой» com.android.camera намерение, потому что многие устройства используют пользовательские приложения для камер. Я видел, что в галерее gallery3d-приложение используется псевдоним, реализующий com.android.camera/.Camera, но я не уверен, что каждое предварительно загруженное приложение камеры производителя делает это.Запустить приложение для камеры по умолчанию (нет возврата)

ответ

10

Я теперь реализовать это следующим образом:

 Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     try { 
      PackageManager pm = mContext.getPackageManager(); 

      final ResolveInfo mInfo = pm.resolveActivity(i, 0); 

      Intent intent = new Intent(); 
      intent.setComponent(new ComponentName(mInfo.activityInfo.packageName, mInfo.activityInfo.name)); 
      intent.setAction(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_LAUNCHER); 

      startActivity(intent); 
     } catch (Exception e){ Log.i(TAG, "Unable to launch camera: " + e); } 
+2

Примечание, вы можете поменять 'Intent.ACTION_MAIN' и заменить действие с' MediaStore.ACTION_IMAGE_CAPTURE', чтобы запустить приложение в режиме фотосъемки или «MediaStore.ACTION_VIDEO_CAPTURE», чтобы начать приложение в режиме видеозахвата. – pents90

+1

, если вы делаете это из фоновой службы, вам нужно будет добавить aim.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); –

+1

Этот ответ не работает! Он открывает Контакты, Youtube и другие нерелевантные приложения. – NecipAllef

5

Этот код будет делать трюк:

Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA); 
context.startActivity(intent); 
+0

Это намерение, похоже, превосходит MediaStore.ACTION_IMAGE_CAPTURE, поскольку предыдущее открывает определенные приложения для камеры в режиме, который является эксклюзивным для фотографий, не позволяя пользователю переключаться на видео. MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA, похоже, не имеет такого же ограничения. –