출처: http://fimtrus.tistory.com/entry/Android-%EC%97%AC%EB%9F%AC%EA%B0%9C-Intent%EB%A5%BC-%EB%AC%B6%EC%96%B4%EC%84%9C-%EB%B3%B4%EB%82%B4%EA%B8%B0
앱을 만들 때, 제조사 또는 버전의 차이로 인해 인텐트 호출후 원하는 리스트가 표시되지 않을 때가 있다.
특히 카메라와 갤러리의 경우가 그렇다.
대부분의 개발자들은 호출 한번으로 카메라와 갤러리를 모두 보여주고 싶은데,
검색능력부족(?)으로 인해, 결국 따로 만드는 경우가 태반이다.
카메라와 갤러리를 동시에 호출할 수 있는 소스를 첨부한다.
먼저 인텐트들을 담을 리스트와와 카메라호출을 위한 인텐트,
그리고 패키지 검색을 위한 패키지 매니저, 마지막으로 카메라 패키지 정보를 담을 변수를 선언한다.
1 2 3 4 5 | final List<intent> cameraIntents = new ArrayList<intent>(); final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); final PackageManager packageManager = getPackageManager(); final List<resolveinfo> listCam = packageManager.queryIntentActivities 0 ); |
그리고 검색된 카메라 패키지 정보를 통해 인텐트 리스트를 만든다.
1 2 3 4 5 6 7 8 9 | for (ResolveInfo res : listCam) { final String packageName = res.activityInfo.packageName; final Intent i = new Intent(captureIntent); i.setComponent( new ComponentName(res.activityInfo.packageName i.setPackage(packageName); i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempFile)); cameraIntents.add(i); } |
마지막으로 갤러리리를 불러오는 인텐트에 카메라 인텐트정보가 담겨 있는 리스트를 담아주면 끝!
1 2 3 4 5 6 | Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType( "image/*" ); Intent chooserIntent = Intent.createChooser(i, "File Chooser" ); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS new Parcelable[]{})); MainActivity. this .startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); |
이렇게 하면 리스트 다이얼로그를 통해 카메라와 갤러리가 함께있는 것을 볼 수 있다.
'IT_Programming > Android_Java' 카테고리의 다른 글
[펌_안드로이드] LoaderManager 동작 이해 (0) | 2014.11.05 |
---|---|
안드로이드 KitKat(4.4) 버젼에서 웹뷰를 통한 자바스크립트 함수 실행 혹은 loadUrl시 동작하지 않는 문제 해결 (0) | 2014.11.04 |
[안드로이드] 안드로이드 애니메이션 효과 및 기능 (0) | 2014.11.03 |
[펌] Storage Access Framework을 통한 이미지 가져오기 (0) | 2014.11.01 |
[펌] kitkat(4.4)에서 맞닥뜨린 이슈 및 해결 (0) | 2014.11.01 |