파일 경로 찾기

2013.07.17 14:38

리눅스에서 해당 파일이 어딨는지 궁금하다면


locate 파일명


이라고 쳐주면 어딨는지 나온다.


apache2.conf 라는 파일을 찾기위해

locate apache2.conf 를 수행한 모습.

2가지 파일의 경로가 나온다.


만약 새로 프로그램을 깔고 어딨는지 찾으려고 했는데 안 나온다면


updatedb


를 한번 수행해주고 다시 locate 파일명 을 해주면 나타난다.





리눅스에서 콘솔에서 작업할때 root 계정이 아니면 명령어를 칠 때마다 sudo 를 쳐줘야 한다.


그래서 root계정으로 바꿔서 작업하면 편하다


su -


라고 명령어를 입력하면 계정이 바뀌는 걸 볼 수 있다.


스샷


jeong 에서 root로 바뀐 걸 볼 수 있다.






사용자로부터 숫자를 입력 받을때 그 값을 검사하고 싶을때 사용한다.

예를 들면 1부터 5까지만 입력을 받고 싶다면 사용자가 5 보다 큰 수를 입력했을때 

값을 초기화 해버리면서 토스트메세지를 즉시 띄우게 된다.


EditText et=(EditText)findViewById(R.id.num); //해당 에디트텍스트 선언

et.addTextChangedListener(new TextWatcher() {

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

// TODO Auto-generated method stub

if(s.toString().length() > 0){ //문자열s의 길이가 0보다 크면

if(Integer.parseInt(s.toString()) > 5){ //문자열s를 int형으로 파싱해서 5보다 크면

et.setText(null);  //에디트텍스트 값을 null로 초기화 해버리고

Toast.makeText(getApplicationContext(), "1부터 5까지만 입력해주세요", Toast.LENGTH_LONG).show();

//토스트메세지를 띄운다.

}

}

}



EditText et=(EditText)findViewById(R.id.num); //해당 에디트텍스트 선언

et.addTextChangedListener(new TextWatcher() {			

@Override

	public void onTextChanged(CharSequence s, int start, int before, int count) {

	// TODO Auto-generated method stub

	if(s.toString().length() > 0){ //문자열s의 길이가 0보다 크면

	if(Integer.parseInt(s.toString()) > 5){ //문자열s를 int형으로 파싱해서 5보다 크면

	et.setText(null);  //에디트텍스트 값을 null로 초기화 해버리고

	Toast.makeText(getApplicationContext(), "1부터 5까지만 입력해주세요", Toast.LENGTH_LONG).show();

//토스트메세지를 띄운다.

		}

	}

}


배경이 어두운 색이라면 


에디트텍스트 입력할때 색깔이 비슷해서 알아보기 어렵다. 그래서 색깔을 바꿔줄 필요가 있는데 그 방법은


출처:http://sungho0459.blog.me/40179645913


 <EditText

    android:id="@+id/etRendererTextBody"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:padding="5dp"

    android:textAppearance="?android:attr/textAppearanceMedium"

    android:textColor="#ffFF6000" 

    android:background="#ffffffff"

    android:textCursorDrawable="@null"/>


 <EditText

                                android:id="@+id/etRendererTextBody"

                                android:layout_width="fill_parent"

                                android:layout_height="wrap_content"

                                android:padding="5dp"

                                android:textAppearance="?android:attr/textAppearanceMedium"

                                android:textColor="#ffFF6000" 

                                android:background="#ffffffff"

                                android:textCursorDrawable="@null"/>


android:textCursorDrawable속성값을 @null로 주고

android:textColor속성값을 부여하게 되면 textColor와 같은 색깔로 커서가 깜빡이게 됨

[출처] android EditText 커서 색깔|작성자 에몬



커서색깔은 물론 쓰여지는 글씨 색깔도 바뀐다.




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

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


특정파일 미디어스캐닝

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 이건 줄 알고 썼다가 왜 안되나 했다.




  1. 궁금 2014.03.04 10:36

    이 소스를 실행해 보셨나요? 혹시 파일 하나만 할때도 스캔할때처럼 상태바에 아이콘이 뜨는지 아시나여?

    • yonoo88 2014.03.04 11:59 신고

      네 폰마다 다른지는 모르겠으나

      제 폰에서는 상태바에서 미디어 검색을 실행하지 않았습니다.

      그 미디어 검색 중 하면서 뜨는거 말씀하시는거죠?

      제가 테스트 해본 폰은 갤럭시S , 베가 NO 6입니다.

  2. 빡새 2014.04.17 14:10

    자료 감사합니다.

  3. 예쁜꽃이피었으면 2014.08.29 10:17 신고

    소스코그 읽는데 도움이 많이 되었습니다. 감사합니다~
    담아갈게요~



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

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


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


그런데 내 테스트기기 중 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퍼 완성해놓고 남은 하나 때문에 시간낭비하는 건 도무지 못 해먹겟다.ㅜㅜ

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




  1. 감사! 2014.04.04 21:03

    삽질의 해결책이 여기 있네요...감사합니다!

    • yonoo88 2014.04.04 22:59 신고

      오 해결되셨나요. 정말 다행입니다. 삽질만큼 짜증나는 일이 없죠..

  2. 조셉 2014.05.30 10:58

    스택오버에서 자주쓰는 코멘트를 쓰고싶네요!!

    you save my day!!

    감사합니다.

    • yonoo88 2014.05.30 21:07 신고

      감사합니다!

      저도 스택오버플로우에서 본 해결책이었네요

  3. 방문객 2014.09.04 15:46

    와..이문제로 정말 고생했었는데 ㅠㅠ감사합니다!

    • yonoo88 2014.09.04 15:52 신고

      해결되셨나요 다행입니다. 아직도 왜 많이들 쓰는 캡쳐방식은 안되는지 모르겠네요..

  4. pong 2014.09.15 16:03

    감사~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  5. 디트 2014.09.18 12:04

    정말 정말 정말 감사합니다 ㅠㅠ!!

  6. phalanx89 2014.10.21 12:12

    감사합니다!
    아쉬운건 getDrawingCache가 왜 안되는지.. 저도 못찾겠더라구요 ㅠ

  7. 양창엽 2014.12.22 09:55

    와 진짜 감사합니다 ㅠㅠ
    저도 용량이 작은 파일 들은 잘 되는데 어느 순간 용량이 큰 파일 들은 안되는 거에요 ㅠㅠ 그래서 진짜 화딱지 많이 났는데 여기서 해답의 열쇠를 찾다니 ㅠㅠ 감사합니다.
    보니깐 이걸 미리 해놓으면 좋은거 같아요. 미리 그려 놓고 바로 저장 하는 거 아닌가요 ㅠㅠ 암튼 감사합니다.
    제 블로그에 퍼가도 되죠 ㅠ?
    그리고 한가지 더 질문 좀 해도되나요?
    Bitmap.Config.ARGB_8888 무슨 뜻인지 알 수 있을까요?

    • yonoo88 2014.12.22 10:08 신고

      넴 출처만 적어주시면 퍼가셔도 됩니다. 멘붕에 빠진 사람들을 구제합시다! 저도 엄청 짱났었어요.

      그리고 저도 복붙유저라 잘은 모르지만...

      ARGB_8888는 이미지 품질?이라고 보시면 되거든요

      16Bit Bitmap : #RRRRRGGGGGGBBBBB (RGB_565)
      24Bit Bitmap : #RRRRRRRRGGGGGGGGBBBBBBBB (RGB_888)
      32Bit Bitmap : #AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB (ARGB_8888)

      이런 설명이 있는데 확실한 건 ARGB_8888 이게 품질이 제일 좋은거네요 ㅋㅋ

  8. anter 2015.01.05 17:58

    you save my day!!2 ..
    제일 어려운 문제를 가장 쉽게 풀었네요.. 감사합니다.. ^^

  9. 마파로스 2015.10.15 20:50

    저같은 경우는 핵심코드 부분이 없었을때도 잘 되었는데 어느때 부터 안되기 시작해서 해당 코드를 적용했더니 해결이 되네요..아마도 캔버스 사이즈에 관련된 오류라고 생각합니다.거길 변경한후 안되기 시작하더군요.하지만 해당코드를 적용하니 당연히 해결이 됩니다.그리는 거니까.

    • yonoo88 2016.01.18 17:09 신고

      아 다행이네요 사이즈가 넘친건지 그게 문제가 될 수도 있는거군요..

  10. 지나가는 프로그래머 2016.01.18 16:57

    너무 감사합니다 ㅜ.ㅜ 스크린 캡쳐가 구연안되서 엄청 골탕먹었는데 감사합니당

  11. 왕초보 2017.09.02 10:15

    글잘읽었습니다 그런데 도무지 이해가 안되서요 ㅜ ㅜ 실례가안된다면 죄송하지만 소스좀 얻을수있을까요?

  12. jhkim7559 2018.04.11 20:49

    혹시 홈화면같은 현재화면 캡쳐는 하는 방식도 알고 계신가요..?

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

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


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

 

 

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

 

 

 

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

 




 

PlayFramework 설치 후 새로운 작업 생성이 안될 때

웁스 메세지가 뜬다 

( 혹은  sudo play new helloworld 라고 쳐서 되면 다행이다. 난 초짜라서 그런지 이걸로는 안됐다)

알아보니 권한문제라고 한다.


그래서 권한을 살펴보니 drwxr-xr-x로 되어있다.



그래서 sudo chmod 777 /usr/local/bin 을 입력하여 bin폴더에 권한을 주었다. 

(/usr/local/bin 은 내가 작업을 생성할 폴더 경로임. 개인에 따라 알맞은 경로 입력)

드디어 즐기래 ㅠㅠ 삽질 끝..



권한 바꼈는지 확인해보니 drwxrwxrwx로 바뀌었다. 



권한에 대한 설명

출처: http://www.mireene.com/webimg/linux_tip1.htm



777 말고도 여러 조합이 있지만 급하고 안될땐 걍 모두 허용으로 하고 문제해결

이거 때문에 암것도 못하고 3시간 삽질.. 항상 이럼. 뭘 할 때마다 본격적으로 하기전부터 기본적인게 안되서..





+ Recent posts