펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO





Handlermsgint값을 보낼 수 있다는것은 알것이다.

(http://biig.tistory.com/34  -  핸들러 사용법 포스팅)



그렇다면, 메시지로 객체를 전달할 수는 없을까 ??


할 수 있다.


기존에는


handler.sendEmptyMessage(int);


형식으로 메시지를 전송했다면,



같은 위치에서


Message msg = handler.obtainMessage();


으로 선언 해 주면


msg.what(int);

msg.obj(Object);

msg.arg1(int);

msg.arg2(int);


이런식으로 메시지에 객체를 담을 수 도 있고, 인트값도 저렇게 넣어 줄 수 있다.


잘 활용한다면 매우 유용하다.


예를들어 다른 액티비티에 객체를 전달해야 하는 경우, parcelable를 상속받고 기타 과정이 복잡한데


Handler를 통해 Object를 넘겨주면 매우 간단하게 해결이 가능하다.


그리고 sendEmptyMessage 대신


handler.sendMessage(msg);


로 해주면 전달이 완료된다.




펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO




Ctrl + Shift + O

ㄴ 자동 import. import가 필요한 부분은 자동으로 연결 해 주고, 불필요한 import는 제거한다.

    초보의 경우, 빨간줄이 생기면 한번씩 눌러보면 해결되는 경우가 많다.


Ctrl + M

ㄴ 현재 활성화 돼 있는 창 이외의 모든 창을 최소화. 즉 소스코드창이 활성화 돼 있는 상태라면,

    소스코드 창을 제외한 Project창이나 Console창이 최소화돼 소스코드창을 넓게 사용 가능.

    한번 더 누르면 원래상태로 복귀한다.


Ctrl + D

ㄴ 커서 라인을 삭제한다.


Ctrl + Shift + C  == Ctrl + /

ㄴ 선택 영역 또는 현재 라인을 주석처리한다. (한손으로 가능해서 편함)


Ctrl + Alt + 방향키 Up , Down

ㄴ 포커스가 위치한 라인을 위 또는 아래에 그대로 Copy 한다.


Ctrl + F

Find/Replace창 표시


Ctrl + Z , Ctrl + Y

Z는 작업 이전으로, YZ로 뒤로갔던것을 다시 앞으로 돌린다.


Ctrl + W

ㄴ 현재 활성화 된 탭 닫기


Ctrl + S

ㄴ 수정사항 저장


Ctrl + L

ㄴ 라인을 입력하는 창이 나오고, 라인을 입력하면 해당 라인으로 이동


F3

ㄴ 메소드/변수를 블록선택 하고 F3을 누르면 해당 메소드가 선언된곳으로 이동한다.


Ctrl + K, Ctrl + Shift + K

ㄴ 메소드/변수를 블록선택하고 단축키를 실행하면 선택된 메소드의 사용한 이전, 다음 사용 라인으로 이동한다.


Ctrl + Shift + F

ㄴ 선택된 영역 코딩스타일 자동 정렬




Android/View | Posted by 덩치 2014. 4. 15. 10:55

간단한 얼럿다이얼로그 출력

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO




AlertDialog.Builder builder = new AlertDialog.Builder(mContext)

.setTitle("종료")

.setMessage("프로그램을 종료 하시겠습니까?")

.setPositiveButton("예", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dlg, int value) {

finish();

}

})

.setNegativeButton("아니요", null);

AlertDialog dialog = builder.create() ;

dialog.show() ;



아니오 버튼에도 리스너를 등록하고싶으면 예 처럼 다이얼로그인터페이스의 클릭리스너를 등록 해 주면 된다.


빌더 옵션에 .addView(view) 를 하면 LayoutInflater로 가져온 뷰를 내용에 셋팅할 수 있다.

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO




미국 워싱턴대학교 연구팀 논문 발표 내용입니다.


미래 얼굴 예측 프로그램에 사진을 입력하면


시간이 지난 뒤의 자신의 얼굴을 볼 수 있는데요,


테스트 결과 실제 얼굴과 매우 흡사해 이슈가 되고 있습니다. 사진을 보시죠





맨 위 사진을 기준으로


왼쪽이 프로그램 예측 결과, 오른쪽이 실제 얼굴이랍니다.


맨위사진 한장만으로 했다면 어떻게 오른쪽 사진과 자세,헤어 등이 일치한지는 의문이지만


소름돋을정도로 비슷하네요





자신의 늙은 모습도 예상할 수 있습니다.


저는 확인하기 좀 두렵네요 ㅎㅎ


늙은 내 모습이라니 조금 비참한 기분이 들 것 같습니다.










이 프로그램을 이용하여 어렸을때 잃어버린 자식의


성장했을 때의 얼굴을 예측하여 부모를 찾을 수 도 있을것이라고 하네요



과학의 발전을 새삼 느껴봅니다.




펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO




private void getPackageList() {

PackageManager pm = this.getPackageManager();


List<PackageInfo> packs =                   getPackageManager().getInstalledPackages(PackageManager.PERMISSION_GRANTED);

Log.i("TAG", "===================================================");

for (PackageInfo pack : packs) {

Log.d("TAG", "| name    : " + pack.packageName);

      Log.d("TAG", "| package : " + pack.packageName);

      Log.d("TAG", "| version : " + pack.versionName);

}

Log.i("TAG", "===================================================");

}



휴대폰에 설치 된 패키지명과 어플명, 버전을 가져온다.



public void onRemovePackage(String removePackage) {

Uri uri = Uri.fromParts("package", removePackage, null);

Intent intent = new Intent(Intent.ACTION_DELETE, uri);

startActivity(intent);

}


removePackage로 받아 온 패키지명의 어플을 삭제하겠냐는 팝업이 나타나고, 해당 패키지를 삭제한다.


호출은 


onRemovePAckage("com.example.test");




Android/View | Posted by 덩치 2014. 4. 9. 16:13

WebView를 이용해 javascript와 통신하기

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


시작하기 전 주의점 : 빌드타겟 ~16 에서는 정상적으로 작동,

타겟 17이상부터는 호출되는 메소드에 @JavascriptInterface 어노테이션을 반드시 추가 해 주어야함


WebView로 띄운 페이지와 App간에 메시지를 주고 받는 방법에 대해 알아보자.


우선 웹뷰를 생성한다.

WebView mWebView ;

mWebView = (WebView) findViewById(R.id.webview);


그리고  웹뷰의 세팅을 자바스크립트를 사용가능하도록 선언한다 (default : false)

mWebView.getSettings().setJavaScriptEnabled(true);


그리고 자바스크립트로부터 데이터를 전달받을 클래스를 생성 해 준다.


private class AndroidBridge {

    public void setMessage(final String arg) {

    handler.post(new Runnable() {

    public void run() {

    mTextView.setText("받은 메시지 : \n" + arg);

    }

    });

    }

    }


자바스크립트에서 AndroidBridge라는 클래스로 메시지를 보내 줄 수 있게 하기 위해서 다음과 같이 선언한다.

mWebView.addJavascriptInterface(new AndroidBridge(), "android");

이제 자바스크립트에서는 AndroidBridge()에 "android"라는 이름으로 접근할 수 있게 되었다.


그리고 웹뷰에 표시할 url을 셋팅 해 준다.

mWebView.loadUrl("file:///android_asset/javapage.html");


자바스크립트 파일 : 

본인은 프로젝트의 assets 폴더javapage.html 이라는 로컬파일을 만들어서 넣고 해당 경로를 선언했다.

첨부 : 

javapage.html

파일 안의 내용은

<html>

<head>

<script language="JavaScript">

function setMessage(arg) {

 document.getElementById('textMessageFromApp').innerHTML = arg;

function sendMessage(msg){

window.android.setMessage(msg);

}

</script>

<style>

input {

position:absolute; top:100%; margin-top:-80px;

}

</style>

</head>

<body>

<hr/>

<h2>WebView와의 통신</h2>

<hr/>

<br/>

받은 메시지 :

<p id="textMessageFromApp" style="height:200px; overflow-y:auto;"> 

</p>

<hr/>

<input type="text" id="textMessageToApp"  value="App으로 전송"/>

<input type="button" value="Send Message" onclick="sendMessage(document.getElementById('textMessageToApp').value)" style="left:50%;"/>

</body>

</html>


중요한부분은 녹색으로 표시 했고,

자세한건 나머지 소스를 보면서 설명하겠다.


App - > 자바스크립트로 메시지 전달 :


아래 소스코드는 에디트텍스트에 적은 내용을 웹뷰로 날려주는것인데, 버튼클릭리스너 등에서 사용한다.

mWebView.loadUrl("javascript:setMessage('" + mEditText.getText() + "')");


이렇게 메시지를(mEditText.getText() 를 javascript:setMessage( ); 에 날려주게되면,

javapage.html 파일의 setMessage 부분에 arg로 값이 전달된다.


html파일에서는 arg로 값을 받아서 textMessageFromApp이라는 텍스트뷰에 표시해 주고 있다.


자바스크립트 - > App으로 메시지 전달 :

페이지의 버튼을 클릭하면 onclick 안의 내용이 실행되면서 textMessageToApp 텍스트뷰의 내용이

sendMessage를 통해 전달된다. sendMessage 부분을 보면


window.android.setMessage(msg);

이렇게 돼 있는데, 아까전에 위에서

mWebView.addJavascriptInterface(new AndroidBridge(), "android");

라고 인터페이스를 추가한 것을 기억해 보면 초록색 소스코드가 이해될것이다.

자바스크립트에서 android라는 이름으로 setMessage를 해 주는 것이다.


이렇게 되면 안드로이드의 AndroidBridge클래스에서 메시지를 받아서 텍스트뷰의 내용을

자바스크립트에서 보낸 msg로 출력된다.



이상으로 안드로이드와 자바스크립트간의 양방향 메시지 전달 방법에 대해 알아보았다.


예제 프로젝트 :

WebView_Javascript.zip


(참조 : http://blog.daum.net/kwh4865/13153880)




펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO


패키지명을 입력하면 설치 여부를 알려주는 소스코드


PackageInfo pi;  

try {

String strAppPackage = "패키지명 (ex : com.exam.googlemap)";

pi = getPackageManager().getPackageInfo(strAppPackage,  PackageManager.GET_ACTIVITIES);

}

catch (PackageManager.NameNotFoundException e) {

//패키지가 설치되지 않음

}


버전을 구하고싶다면


String str = pi.versionName;




Android | Posted by 덩치 2014. 4. 3. 18:24

스마트앱마스터 자격증의 속셈

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO

이전에 스마트앱마스터 어플에 대한 글을 썼는데,

http://biig.tistory.com/55


나도 그냥 가서 시험이나 보자는 생각으로 2급을 신청했었다.


개발 툴은 기존에는 mbizmaker가 베이스이고, 추가로 설치할 수 있는 프로그램이 있다면 설치해서 개발하라고 했었는데





조금전에 대한상공회의소에서 전화가 와서 받았더니


채점프로그램과의 호환때문에 개발툴은 엠비즈메이커로만 가능하단다 하하하하하ㅏㅎ하하ㅏ하


뭔이딴경우가 다있는지 모르겠지만 일단 결제는 취소했고 ..


완전 엠비즈 키우기식 자격증인것같은데, 정말 말도안되는 자격증이라고 생각한다.


자격증 따기 전에는 디스하지 않으려고했건만


아니나 다를까 이렇게 대놓고 속셈을 들어낼줄이야 ..


이로써 효용성에 대해서는 결론이 나왔다.


완전 무쓸모 자격증



'Android' 카테고리의 다른 글

앱 개발 자격증 '스마트앱마스터' 자격증 정보  (2) 2014.04.02
Android/View | Posted by 덩치 2014. 4. 3. 16:21

나인패치 (9patch) 이미지 만드는 방법

펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO

나인패치 이미지란


(http://developer.android.com/tools/help/draw9patch.html) <- 디벨로퍼사이트의 나인패치에 대한 설명


해상도가 다른 단말기에서 아이콘 등이 확대 될 때, 확대 되는 영역을 특정지어서 확대되서


픽셀이 깨지는 (라운드,그라데이션) 현상 없이 확대되는 이미지.


확대되도록 설정한 영역 이외의 부분은 확대가 되지 않는다.


쉽게말해 말풍선 같은 이미지를 네 모서리와 하단 꼭짓점 크기는 고정시키고 안의 크기만 늘려주며,


고정된 해상도라기 보다 어떤 해상도로 늘어나더라도 이미지가 깨지지 않도록 하는 방식이다.


다음 이미지를 보자




위 이미지가 나인패치 이미지이다. 확장자가 .9.png로 특이한 형태를 취하고 있으며,


풍선 주위에 검은색 선은 확장 영역과 콘텐츠 영역을 표시하는것으로, 실제 이미지가 적용되면 나타나지 않는다.


나인패치 사용법에 앞서 우선 위의 이미지가 어떻게 확장되는지 설명을 하자면


다음 이미지를 보며 설명해주겠다.




왼쪽변의 검은 선은 세로로 확장되는 영역, 상단변의 짧은 선 두개는 각각 세로로 확장되는 영역이며,


우측변의 검은 선은 콘텐츠(텍스트 등)가 들어가는 세로영역, 하단의 변은 마찬가지 콘텐츠가 들어가는 가로 영역이다.


분홍색 기둥 두개가 보일텐데, 간단히 말해 저 두개의 영역이 확대,축소되며 이미지를 표시한다.


즉, 노란부분과 분홍색 막대 상,하단, 왼쪽분홍막대 좌측, 오른쪽 분홍막대 우측 영역은


이미지 크기가 불변한다. (돼지꼬리)


분홍색 막대만이 가로,세로로 확장되고 축소되며 전체 이미지가 커지거나 작아지는것처럼 표시된다.


그렇기때문에 작은 해상도에서는 라운드가 엄청 커보이지만, 큰 해상도에서는 라운드가 작아보이게 되고


엄청 커지면 라운드는 거의 없는것처럼 보이게 된다.


밑의 말풍선 꼬리 영역도 마찬가지로 크기가 변하지 않는다.


위 이미지처럼 라운드가 있거나, 또는 그라데이션이 있어서 그라데이션 영역은 확장하지 않고, 이외의 부분만


확장될 수 있을 때, 나인패치 이미지를 사용한다.


나인패치의 한계는 하트모양이나 동그라미처럼 특정 영역만 확대하면 모양이 이상해져버리는 


도형에는 사용할 수 없다는것이다.


나인패치를 만드는법을 알아보자. 우선 이미지를 준비한다. 포토샵으로 그려도 되고 기존의 이미지를 사용해도 된다.



나는 간단하게 아래의 이미지로 실습을 해 보겠다.




다음은 나인패치 이미지를 만들 수 있는 툴을 실행시킨다.

(툴은 안드로이드 sdk에 있으며, 툴이 없는 경우 포토샵으로 맨처음 이미지처럼 만들고, 확장자를 name.9.png 식으로 저장하여도 된다.)


나의 경로는

adt-bundle-windows-x86_64-20130522 -> sdk -> tools -> draw9patch.bat


draw9patch.bat 파일을 실행시키면 잠시후 다음과 같은 창이 나타나는데,




이미지를 드래그해서 위 창에 드랍시킨다.




그럼 이렇게 표시된다. 우측은 미리보기이고..


상하좌우 맨 마지막 1픽셀을 마우스로 클릭하여 드래그하면 검은색 선이 생기는데,


이런 방식으로 영역을 설정 해 준다.


일반적으로.콘텐츠영역은 확대되는 영역의 최대 영역으로 설정한다.


영역 취소는 시프트를 누르고 클릭 하여 드래그하면 된다.




(이런식으로 색상이 구분되는것은 하단에 show patches 를 체크해 주면 된다.)


분홍색 부분이 확대되는 영역, 초록색과 붉은부분이 확대되지 않는 영역이며


우측을 보면 확대를 엄청 했을경우 미리보기인데, 라운드부분은 확대되지 않아서 상대적으로 작아보인다.


하지만 이런 특성 덕분에 라운드가 깨져보일 염려는 없다.




나름대로 알아듣기 쉽게 설명하기 위해 노력했는데 잘 전달 되었는지 모르겠습니다.


문의사항은 댓글 남겨주세요



펌 환영. 출처만 남겨주세요



펌 OK (출처 표시), 상업적 이용 NO, 컨텐츠 변경 NO

대한상공회의소에서 올 4월부터 스마트앱마스터(SAM) 라는 자격증 시험을 시행한다.


2,1,전문가 등급이 있으며


첫 응시 일자는 4월 3일 ~ 4월 9일

시험 일자는 4월26일이 첫 시험이다.

(http://license.korcham.net/index.html)


시험은 사진과 같이 치뤄진다.


2급 예상 기출문제는 첨부파일을 확인하기 바라며(출처는 대한상공회의소)


2014년 스마트앱마스터(2급) 통합-모의문제.hwp



문제를 보면 알겠지만 .. 뭔가 굉장히 까다롭다.


웹앱과 하이브리드앱에 대한 정의도 뚜렷하지 않은 시점에 관련 문제를 낸다는것도 애매하고


일단 시험에는 구글링이 되지 않으니 .. 반은 꿇고 들어가야할듯하다.



왠 뻘같은 자격증인가 싶은게 솔직한 심정이고,


진짜 뻘짓일지 아닐지는 일단 자격증을 딴 다음 따져야할 듯하다.



실기에서 요구하는 기능들을 보니 ..


보편적으로 자주 사용하게 되는 기능들 위주로 짜여진듯 하다.


그러나 어중간하게 가서 시험볼 생각으로 가면 낭패를 볼듯.



자주 사용되는 기능에 대해서만 확실히 숙지한다면 2급정도는 무난하게 합격하지 않을까 하며



첫시험 2급에 응시했습니다. 서울지역에서 신청하여서 경복비즈니스 고등학교에서 시험치게 됬네요


혹시 같은 시험장 오시는분 계시면 덩치큰사람있으면 저인줄 알고 인사주세요 ㅎㅎㅎ





'Android' 카테고리의 다른 글

스마트앱마스터 자격증의 속셈  (5) 2014.04.03