지식메모/안드로이드 Android

반응형

화면 캡쳐 후 갤러리에 이미지가 뜨지 않는다면 미디어 스캐닝을 해주고 나면 해결할 수 있다.

이 소스만 추가해주면 된다.


특정파일 미디어스캐닝

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+ "폴더위치"+"파일이름"+".파일확장자")));


특정 폴더 미디어스캐닝

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+Environment.getExternalStorageDirectory()+"/temp")));


전체 미디어스캐닝(시간이 좀 걸림)

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+Environment.getExternalStorageDirectory())));




빨간 표시를 주의하자

ACTION_MEDIA_MOUNTED 이건 줄 알고 썼다가 왜 안되나 했다.




반응형
반응형



어플을 만드는데 현재화면 캡쳐가 아닌 레이아웃을 캡쳐하는 기능이 필요했다.

그것도 전체 레이아웃이 아닌 상단 바를 제외한 부분 레이아웃캡쳐였다.


그래서 인터넷에 검색하여 아주 간단한 화면캡쳐소스를 구해 돌려보았다. 


그런데 내 테스트기기 중 2.2프로요 기기에서는 잘 되는데 4.0 아이스크림 기기에서는 안되는 것이었다.

요즘 누가 2.2 쓰나 . 4.0에서 작동되는게 중요했기 때문에 계속 해결책을 찾아보았다.


소스상에는 문제가 없으나 어플을 실행하고 캡쳐버튼을 누르면 자꾸 강제종료가 되었다.

로그캣에서는 Bitmap이 널 값이 난다고 나와있었다.

container.buildDrawingCache();
container.setDrawingCacheEnabled(true);
Bitmap captureView = container.getDrawingCache();//비트맵 널 값에러나는 부분

그래서 로그로 container.getDrawingCache(); 이걸 출력해보니 이게 널 값이라고 떴다. 이게 문제였다.

그래서 위 소스를 활용한 간단한 캡쳐예제를 두 테스트기기에서 돌려보니 잘 되었다.

이 예제였다. 용돈벌기 책 예제이다.

CapturePartEx.zip


??

2.2 ,4.0 둘 다 캡쳐가 잘된다. 


이걸 그대로 따라서 적용해보았는데

뭐야 같은 방식인데  똑같이 따라한건데 왜 예제는 되고 내가하면 안되는거지..

미쳐버릴 노릇이었다. 



슈퍼삽질을 해보니 안드로이드 버전에 따른 API기능상 문제는 아니라는 결론을 내렸고

다른 방법으로 캡쳐하는 방법을 찾아보기로 했다.


그래서 온갖 구글링을 찾아 헤매다가 거의 두 달만에 해결을 했다.


https://groups.google.com/forum/#!searchin/android-developers/android$20getDrawingCache/android-developers/VQM5WmxPilM/gYHJGQZh7hMJ


여기 있는 걸 따라해봤더니 갑자기 된다..

바로 캡쳐하지않고 캔버스에 그려서 캡쳐하는 방식인 것 같았다.


 int width_container = container.getWidth() ;//캡쳐할 레이아웃 크기

 int height_container = container.getHeight() ;//캡쳐할 레이아웃 크기



container.setDrawingCacheEnabled(true);

container.buildDrawingCache(true);


/***********************핵심부분**********************************/
Bitmap captureView = Bitmap.createBitmap(container.getMeasuredWidth(), 

 container.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

Canvas screenShotCanvas = new Canvas(captureView ); 

container.draw(screenShotCanvas); 
/***********************핵심부분*****************************************/


	                FileOutputStream fos; 		

 			Intent it3=getIntent();	

 			String str_name=it3.getStringExtra("it3_name");	 			



 			File fileRoute = null;

 			fileRoute = Environment.getExternalStorageDirectory(); 		



 			try {

 				File path = new File(fileRoute,"temp");

 				if(!path.exists()){//if(!path.isDirectory()){

 					path.mkdirs();

 				} 		



 				fos = new FileOutputStream(fileRoute+"/temp/"+str_name+"-.jpeg");

 				Log.d("[screenshot]", " : " + container.getDrawingCache());

 				captureView.compress(Bitmap.CompressFormat.JPEG, 100, fos);

 				container.setDrawingCacheEnabled(false); 		



 			}catch (FileNotFoundException e) {

 				e.printStackTrace();

 			}



이 방법을 쓰니 해결이 되었다.


진짜 온갖 안드로이드 커뮤니티에 글도 올려보고 책 저자에게 메일도 보내고 별 짓 다 해봤는데 안되니까 정말 짜증났다. 진짜 번역기 돌려서 스택오버플로우에도 올려봤는데 아무도 대답을 안해주고..


진짜 90퍼 완성해놓고 남은 하나 때문에 시간낭비하는 건 도무지 못 해먹겟다.ㅜㅜ

이 글로 다른 누군가가 삽질할때 도움이 되었으면 좋겠다.




반응형
반응형

다 깔았는데 에뮬레이터 실행이 안된다. 매우 짱난다.

검색 끝에 해결법을 찾았다.


윈도우-> 가상장치관리자로 간다.

 

 

 실행시킬 에뮬레이터 선택하고 옆에 Edit 클릭

 

 

 

램부분을 1024 이하로 수정해주면 작동이 된다.(800~900 정도로 두면 된다고 한다.)

 




반응형

+ Recent posts