마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

아까 카메라 앱 소스입니다..

0 추천
private void callCamera() {
		Intent intent = new Intent();

		intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
		// Crop된 이미지를 저장할 파일의 경로를 생성
		mImageCaptureUri = createSaveCropFile();
		intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
		startActivityForResult(intent, RESULT_CAMERA_RETURN);
	}

	private void addLocalImage(String _Uri) {
		if (new File(_Uri.replaceFirst("file://", "")).exists()) {
			String fileName = _Uri.substring(_Uri.lastIndexOf('/') + 1);
			int code = imageCodeExtraction(fileName);

			mmmodel model = new mmmodel ();
			model.setFilename(fileName);
			model.setType(KEY_LOCAL);
			model.setCode(code);
			imageList.add(model);
		}
		runOnUiThread(new Runnable() {
			@Override
			public void run() {
				adapter.notifyDataSetChanged();
			}
		});
	}

	private void localImageCall() {
		File[] listFiles = (new File(LocalImgPath).listFiles());

		for (int i = 0; i < listFiles.length; i++) {
			mmmodel model = new mmmodel ();
			int code = imageCodeExtraction(listFiles[i].getName());

			model.setFilename(listFiles[i].getName());
			model.setType(KEY_LOCAL);
			model.setCode(code);

			imageList.add(model);
		}
		adapter.notifyDataSetChanged();
	}

	private int imageCodeExtraction(String name) {
		int index = name.indexOf('_');
		int code = Integer.parseInt(name.substring(index + 1, index + 4));
		return code;
	}

	private int lastImageNum(int _code) {
		int paper_num = 101;
		int image_local_num = 701;
		int image_num = 501;

		System.out.println(imageList.size());
		for (int i = 0; i < imageList.size(); i++) {
			try {
				int code = imageList.get(i).getCode();

				if (101 <= code && code <= 500) {
					if (paper_num <= code) {
						paper_num = code + 1;
					}
				} else if (501 <= code && code <= 700) {
					if (image_num <= code) {
						image_num = code + 1;
					}
				} else if (701 <= code) {
					if (image_local_num <= code) {
						image_local_num = code + 1;
					}
				}
			} catch (Exception e) {
			}
		}

		if (_code == 100) {
			return paper_num;
		} else if (_code == 500) {
			return image_num;
		} else {
			return image_local_num;
		}
	}
/**
	 * Crop된 이미지가 저장될 파일을 만든다.
	 *
	 * @return Uri
	 */
	private Uri createSaveCropFile() {
		String url = mngNo + "_"
				+ (camera_code == 0 ? lastImageNum(100) : lastImageNum(700))
				+ ".jpg";
		Uri uri = Uri.fromFile(new File(ImageListActivity.LocalImgPath, url));
		return uri;
	}

	private class getImageDown extends AsyncTask<Void, Void, Void> {

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
		}

		@Override
		protected Void doInBackground(Void... params) {

			for (int i = 0; i < imageList.size(); i++) {
				if (!"null".equals(imageList.get(i).getFilename())) {
					// 파일이름을 포함한 전체경로.
					File file = new File(ImgPath
							+ imageList.get(i).getFilename());
					String _url = getString(R.string.image_url1,
							imageList.get(i).getFilename().substring(3, 7),
							mngNo, imageList.get(i).getFilename());

					// 파일이 존재하지 않을경우에만 다운로드 수행.
					if (file.exists() == false) {
						downloadImage(file, IMAGE_URL + _url);
					}
				}
			}
			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			super.onPostExecute(result);
			if (mIndicator.isShowing())
				mIndicator.hide();
			listView.setAdapter(adapter);
			adapter.notifyDataSetChanged();
			localImageCall();
		}
	}

 

양꼬양 (2,040 포인트) 님이 2015년 6월 5일 질문
양꼬양님이 2015년 6월 5일 reshown

2개의 답변

0 추천
 
채택된 답변

 음 소스를 살펴보니 아마 폰들에 들어 있는 카메라 앱을 통해서 사진은 회득하는 것 같내요.

그렇다면 각 제조사마다 카메라 앱이 다 다르므로

앱의 동작결과도 어떨지는 알수가 없내요.

기본적으로 mediastore를 좀 조사하셔야 하겠는데

사진을 촬영하는 액티비디 차제가 결과 사진을 mediastore에 등록하고 파일로 저장할 수도 있고

아닐수도 있습니다.

아무튼 폰마다 다 달라서 결과는 어떻게 될지 알수가 없내요.

한가지 편법을 생각해보자면

캡처 액티비티가 종료했을 때 정보에 사진의 저장 정보들을 알수 있으시다면 사진을 지우시고 미디어스토어에서 등록된 부분을 지워 주시는 방법 정도를 생각해 볼수 있겠습니다.

우선은 여기 펍부터 medaistore, mediaprovider, mediascanner 등을 검사해보시구요.

사진파일이 기기에 남아 있지 않아야 한다면 직접 사진을 획득하는 모듈을 만드셔도 됩니다.

예제들은 인터넷에 많이 있습니다.

preview 기능을 하면서 사진을 획득 할 수 있는 예제들을 보시면 도움이 될 꺼고..

https://github.com/almalence/OpenCamera

이런 오픈소스도 있습니다.

컴러기 (22,230 포인트) 님이 2015년 6월 5일 답변
양꼬양님이 2015년 8월 3일 채택됨
0 추천
코드를 보니 intent로 파일로 캡쳐 하는 방식을 사용하셨네요. 그래서 파일이 생성 되었고 생성 후 단말에 따라 미디어 스캐너를 돌린 단말은 갤러리에 이미지가 보이고, 안 돌린 단말은 안보인 듯 합니다.

Camera 클래스의 takePicture 를  사용하여 버퍼 형식으로 캡쳐 데이터를 구하셔야 파일이 안 생기고 갤러리에도 안나올 듯 합니다.

 

그게 싫으시면, 전송 후 파일을 삭제하고 미디어 스캐너를 다시 돌리셔도 되구요.
익명사용자 님이 2015년 6월 5일 답변
...