본문 바로가기

Programming/Android

[Android] 여러개 Intent를 묶어서 보내기.

앱을 만들 때, 제조사 또는 버전의 차이로 인해 인텐트 호출후 원하는 리스트가 표시되지 않을 때가 있다.

특히 카메라와 갤러리의 경우가 그렇다.

대부분의 개발자들은 호출 한번으로 카메라와 갤러리를 모두 보여주고 싶은데,

검색능력부족(?)으로 인해, 결국 따로 만드는 경우가 태반이다.

카메라와 갤러리를 동시에 호출할 수 있는 소스를 첨부한다.




먼저 인텐트들을 담을 리스트와와 카메라호출을 위한 인텐트, 그리고 패키지 검색을 위한 패키지 매니저, 마지막으로 카메라 패키지 정보를 담을 변수를 선언한다.


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(captureIntent, 0);


그리고 검색된 카메라 패키지 정보를 통해 인텐트 리스트를 만든다.


for(ResolveInfo res : listCam) {
    final String packageName = res.activityInfo.packageName;
    final Intent i = new Intent(captureIntent);
    i.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    i.setPackage(packageName);
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempFile));
    cameraIntents.add(i);

}


마지막으로 갤러리리를 불러오는 인텐트에 카메라 인텐트정보가 담겨 있는 리스트를 담아주면 끝!


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, cameraIntents.toArray(new Parcelable[]{}));
MainActivity.this.startActivityForResult(chooserIntent,  FILECHOOSER_RESULTCODE); 


이렇게 하면 리스트다이얼로그를 통해 카메라와 갤러리가 함께있는 것을 볼 수 있다.


출처 : 기억안남...