티스토리 뷰

개발을 하다보면, 여러가지 Intent 기준을 가지고, 값을 가져올수 있다.

이렇게 화면에 나오는 부분을 합쳐서 하나의 창에서 선택할수 있게 개발을 하여야 하는 상황이 발생한다.


사용방법은 다음과 같다.

Intent로 값을 가져온 이후에 putExtra로 합쳐주면 된다.


아래의 getPickIntent()의 값이 Gallery와 Camera가 합쳐져서 나오는것이며,

메소드명에서 보듯이 각각의 Intent를 합치는 작업을 한다.


* getCameraIntent()에 보면 mScreenShotUri값은 onActivityResult에서 사용하려고 빼둔것임. 소스에 포함안되어 있다고 하지 말기.


소스.


	private Intent getPickIntent() {

		Intent chooserIntent = Intent.createChooser(getGalleryIntent(), getString(R.string.FILE_UPLOAD_TITLE));
		chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{getCameraIntent()});

		return chooserIntent;
	}

	private Intent getGalleryIntent() {

		Intent galleryIntent = new Intent(Intent.ACTION_PICK);
		galleryIntent.setType(MediaStore.Images.Media.CONTENT_TYPE);
		galleryIntent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

		return galleryIntent;
	}

	private Intent getCameraIntent() {

		Intent takeCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		List<ResolveInfo> listImage = mPackageManager.queryIntentActivities(takeCameraIntent, 0);

		Intent[] result = null;
		if(listImage != null && listImage.isEmpty() == false) {
			result = new Intent[listImage.size()];
			for(int index = 0; index < listImage.size(); index++) {
				final ResolveInfo res = listImage.get(index);
				final String packageName = res.activityInfo.packageName;

				final Uri fileUri = makeFileUri("jpg");
				outputFileList.add(fileUri);

				final Intent intent = new Intent(takeCameraIntent);
				intent.setComponent(new ComponentName(packageName, res.activityInfo.name));
				intent.setPackage(packageName);
				intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
				result[index] = intent;
			}
		} else {
			result = new Intent[]{};
		}

		return result;
	}

	public Uri makeFileUri(String extension) {

		String folderName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
		String fileName = new SimpleDateFormat(FILE_FORMAT, Locale.KOREA).format(System.currentTimeMillis());
		String fullName = folderName + File.separator + fileName + "." + extension;

		File folder = new File(folderName);
		if(folder.exists() == false) {
			folder.mkdirs();
		}

		File file = new File(fullName);
		return Uri.fromFile(file);
	}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함