1. 이미지와 텍스트가 같이 들어간 버튼 만들기
 http://www.androidpub.com/15765
 
2. 버튼 색깔 바꾸기
 http://stackoverflow.com/questions/1521640/standard-android-button-with-a-different-color
 
3. 전체화면 사용하기 (Status bar, Title bar 숨기기)
 http://www.androidpub.com/4710
 
4. ImageButton의 투명 효과 사용하기
 http://joywoni.egloos.com/2847047
 
5. Android 정리문서
 http://sgap.springnote.com/pages/5076381
 
6. 네이티브 안드로이드 개발 관련 블로그
 http://hybridego.net/
 
7. 안드로이드 개발 각종 예제 소스
 http://www.androidpeople.com/2010/01/
 
8. 메뉴별 이미지 처리
 http://stackoverflow.com/questions/2065430/fixed-android-detecting-focus-pressed-color
 
9. 객체 Style 처리
 http://www.anddev.org/viewtopic.php?p=37330
 
10. Button Highlight
 http://www.androidpeople.com/category/android-tutorial/
 
11. SurfaceView
 http://vissel.tistory.com/92
 
12. android:configChanges
 http://www.androidpub.com/52338
 
13. 전원관리
 http://samse.tistory.com/entry/AlarmManager-PowerManager
 
14. 하드웨어 콘트롤 관련 PDF 문서
 http://mikechen.com/classes/2009-11-27%20NTU%20Mobile%20Phone%20Programming%20-%20Mike%20Chen%20-%2010%20-%20Security,%20Camera,%20Audio%20and%20Video.pdf
 
15. unique device ID 고유값 가져오기
 http://developer.android.com/reference/android/telephony/TelephonyManager.html#getDeviceId%28%29
 
16. 안드로이드 네이티브 라이브러리
 http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=34284
 [다른블로그] http://infodev.tistory.com/322
 
17. Introduction android
 http://yotteum.tistory.com/entry/Introduction-Android
 
18. 안드로이드 - 버튼 OnClickListener 인터페이스 구현
 http://woosa7.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%B2%84%ED%8A%BC-OnClickListener-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-%EA%B5%AC%ED%98%84
 http://www.cyworld.com/kkjw1801/3222534
 
19. Android - Change Tab Background
 http://escomic.net/218
 
20. KH5200 드라이버 설치
 http://kil.imradriss.co.cc:8000/tc/30
 
21. DrawableTop 이미지 변경하기
 http://www.androidpub.com/10154
 
22. Layout 사이즈 동적변경
 http://www.androidpub.com/40481
 http://gall.dcinside.com/list.php?id=accident2&no=1195485
 
23. Android UI 개발기: XML 안쓰고 UI 코딩하기
 http://xrath.com/2009/11/android-ui-%EA%B0%9C%EB%B0%9C%EA%B8%B0-xml-%EC%95%88%EC%93%B0%EA%B3%A0-ui-%EC%BD%94%EB%94%A9%ED%95%98%EA%B8%B0/
 
24. 전화상태 변화감지 리스너
 PhoneStateListener 예제
 http://www.kandroid.org/board/board.php?board=AndroidTechQnA&page=124&command=body&no=432
 
25. 안드로이드 하드웨어관련 자료(통화,폰상태,네트워크,카메라,센서)
 http://gtko.springnote.com/pages/5396297
 http://developer.android.com/reference/android/content/Intent.html
 http://developer.android.com/reference/android/net/ConnectivityManager.html
 
26. sms 수신해서 요약내용 보여주기
 http://www.anddev.org/recognize-react_on_incoming_sms-t295.html
 http://flytop.tistory.com/62
 
27. BroadcastReceiver XML설정하기
 http://www.androidpub.com/186727
 
28. 각종 Management 클래스
 http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&page=10&wr_id=34565
 
29. Dialog 구조 분석
 (아이콘,텍스트 위치등)
 http://sgap.springnote.com/pages/5235569
 
30. SMS 수신시 Toast 메시지 출력
 http://www.androidpub.com/138352
 
31. Broadcast Receiver :네트워크상태 체크
 http://www.anddev.org/viewtopic.php?p=32088
 
32. 안드로이드 API기능 설명
 http://www.jopenbusiness.com/mediawiki/index.php/Android
 
33. Actions for BroadcastReceiver
 http://www.dearsoft.org/tag/broadcastreceiver/
 
34. Layout.out.xml 생성되는 문제
 http://www.androidpub.com/101585
 
35. Multi Touch
 http://www.mentby.com/naya/multitouch-support-in-android-20.html
 http://gist.github.com/324166
 
36. ScrollView 스크롤 하단으로 내리기
 http://www.anddev.org/viewtopic.php?p=36823
 
37. Timer 만들기
 http://developer.android.com/intl/de/resources/articles/timed-ui-updates.html
 http://www.developer.com/java/ent/print.php/3589961
 http://www.androidpub.com/4374
 http://blog.inculab.net/25
 
38. Logcat 동작안하는 에러 발생시 처리
 (Could not create the view: For input string: "")
 http://www.mail-archive.com/android-developers@googlegroups.com/msg60683.html
 
39. SSL 인증서 등록하기
 http://www.java2go.net/blog/197?TSSESSION=1202a1a23fa67bae15ce3ab15a5a0cea
 http://www.virgo81.net/70
 http://crazybob.org/2010/02/android-trusting-ssl-certificates.html
 http://www.bouncycastle.org/latest_releases.html
 
40. Signing By Private Key
 http://www.devx.com/wireless/Article/39972/1954
 
41. 영상 녹화하기
 http://www.anddev.org/viewtopic.php?p=24723#24723
 
42. SurfaceView 의 이해
 http://androidhuman.tistory.com/entry/카메라를-이용하자-SurfaceView에-대한-이해
 http://androidhuman.tistory.com/entry/카메라를-이용하자-카메라-프리뷰-띄우기
 
43. 안드로이드 JAVA 소스
 http://anddev.tistory.com/77
 http://anddev.tistory.com/50
 http://anddev.tistory.com/42
 
44. SSL 인증서 우회하기
 http://www.experts-exchange.com/Programming/Languages/Java/Q_23063074.html
 http://7bee.j2ee.us/blog/2008/03/28/1206704820000.html
 
45. JAVA SSL 관련 공식문서
 http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html
 http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore
 http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CodeExamples
 http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/samples/sockets/client/SSLSocketClient.java
 
46. SSL 인증서 증명에러 해결하기
 http://blog.naver.com/PostView.nhn?blogId=fidelis98&logNo=140103425406&redirect=Dlog&widgetTypeCall=true
 http://code.google.com/p/android/issues/detail?id=1946
 http://developer.android.com/intl/de/reference/javax/net/ssl/TrustManager.html
 http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/200906.mbox/
 http://www.exampledepot.com/egs/javax.net.ssl/GetCert.html?l=rel
 http://www.android-portal.com/2007/12/20/secure-server-socket-with-tlsssl-on-android-fails/
 http://www.exampledepot.com/egs/javax.net.ssl/TrustAll.html?
 http://blog.keduall.co.kr/lsb76/entry/자바-SSL-접속-오류
 해결방법: http://www.exampledepot.com/egs/javax.net.ssl/TrustAll.html
 
47. 안드로이드 Service 에서 Activity 를 실행하는 방법
 http://blog.naver.com/huewu/110084868855
 
48. 안드로이드 이미지(사진) 불러오기
 http://shinluckyarchive.tistory.com/469
 http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
 
49. SSL 인증키 무조건 우회하기
 http://groups.google.com/group/android-developers/browse_thread/thread/62d856cdcfa9f16e
 
50. 효과음 관련 자료(Creating Sound Effects in Android)
 http://www.androidpub.com/257540#4
 
51. 안드로이드(Android) 분석 스프링노트
 http://fanpro.springnote.com/pages/4789459
 
52. BaseAdapter 활용
 http://udroid.blogspot.com/2009/04/customized-list-adapter.html
 
53. ListView에서 Selector 배경을 특정색으로 변경할려면?
 http://kippee.dothost.co.kr/kurt/entry/팁-ListView에서-Selector-배경을-특정색으로-변경할려면
 
54. Tab Focuse에 따른 아이콘 변경하기
 http://www.androidpub.com/155974
 
55. SoundPool 사용(MediaPlayer 관련)
 http://www.droidnova.com/creating-sound-effects-in-android-part-1,570.html
 http://www.androidpub.com/257540#1
 http://www.androidpub.com/257336
 
56. MediaPlayer 버퍼 캐쉬 만들어 쓰기
 http://blog.pocketjourney.com/2008/04/04/tutorial-custom-media-streaming-for-androids-mediaplayer/
 
57. Android Tutorial 3: Custom Audio Streaming with MediaPlayer
 http://blog.pocketjourney.com/2008/04/04/tutorial-custom-media-streaming-for-androids-mediaplayer/
 
58. SufaceView , MediaPlayer 만들기
 http://groups.google.com/group/android-developers/msg/52618aafc7d82156
 http://www.kandroid.org/board/board.php?board=AndroidTechQnA&page=2&sort=hit&command=body&no=312
 http://kippee.dothost.co.kr/kurt/entry/팁SufaceView-SufraceHolder-MediaPlayer-MediaPlayerControll를-이용한-동영상화면
 
59. Get the size of the screen.
 http://www.anddev.org/viewtopic.php?p=36355
 
60. Dialog 의 다른 출력방식
 http://code.google.com/p/android/issues/detail?id=6225
 
61. 안드로이드에서 볼륨조절하기.
 1.볼륨 조절 버튼으로 조절 하기.
 2.화면에서 SeekBar를 통해서 조절하기
 http://drcarter.tistory.com/entry/Android-안드로이드에서-볼륨조절하기
 
62. AudioTrack 활용하기
 http://www.google.com/search?rlz=1C1GGLS_koKR311KR313&sourceid=chrome&ie=UTF-8&q=AudioTrack+start+안드로이드
 http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=228
 
63. Memory leak 방지
 올바른 Context 사용
 http://samse.tistory.com/tag/Activity%20context
 http://developer.android.com/intl/de/resources/articles/avoiding-memory-leaks.html
 http://www.androidpub.com/258470
 
64. Bitmap image resizing source
 http://skyswim42.egloos.com/3477279
 
65. MediaPlayer 재생시 특정시간후 소리가 Closing stereo device 현상
 http://www.androidpub.com/387458
 
66. Android 에서 현재 화면 top 에 있는 activity 알아내기.
 http://shadowxx.egloos.com/10489531
 
67. Custom Media Streaming with MediaPlayer
 http://whyandroid.com/android/92-android-tutorial-3-custom-media-streaming-with-mediaplayer.html
 
68. SDK상에서 MediaMetadataRetriever를 이용한 Video thumbnail 얻는 방법?
 http://www.suppul.com/blog/main/202
 
69. android mediaplayer deadlock
 http://www.google.co.kr/search?complete=1&hl=ko&q=android+mediaplayer+deadlock&aq=f&aqi=&aql=&oq=&gs_rfai=
 http://code.google.com/p/android/issues/detail?id=959
 
70. AsyncTask
 http://tigerwoods.tistory.com/28
 
71. MySql, Json, Android 연동
 http://www.android-center.com/TB/?P=11871
 
72. PVMF Return Codes
 http://www.netmite.com/android/mydroid/1.5/external/opencore/doc/pvmf_return_codes.pdf
 http://www.netmite.com/android/mydroid/1.5/external/opencore/doc/
 
73. Java에서 동영상 변환
 http://naingyo.springnote.com/pages/1606686.xhtml
 http://blog.zemzem.kr/121
 
74. android-jni-examples
 http://www.codeweblog.com/change-android-jni-examples/
 
75. How to take pictures in Android
 http://snippets.dzone.com/posts/show/8683
 
76. JMF 2.1.1 - Supported Formats
 http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/formats.html
 
77. Android Camera Preview Filter Using Camera.PreviewCallback.onPrevi ewFrame
 http://groups.google.com/group/android-developers/browse_thread/thread/c85e829ab209ceea/3f180a16a4872b58?lnk=gst&q=onpreviewframe#3f180a16a4872b58
 http://stackoverflow.com/questions/1893072/getting-frames-from-video-image-in-android
 
78. How to use WebView & WebViewClient
 http://earendil75.egloos.com/2584204
 http://nuninaya.tistory.com/536
 
79. BitmapFactory.decodeByteArray gives pixelated bitmap
 http://stackoverflow.com/questions/2183808/android-bitmapfactory-decodebytearray-gives-pixelated-bitmap
 
80. Android Bitmap Object Resizing Tip
 http://blog.naver.com/PostView.nhn?blogId=visualc98&logNo=79874750
 
81.
 
82. Byte to File (Image)
 http://stackoverflow.com/questions/649154/android-bitmap-save-to-location
 http://stackoverflow.com/questions/2183808/android-bitmapfactory-decodebytearray-gives-pixelated-bitmap
 http://developer.android.com/intl/de/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CreateBitmap.html
 http://developer.android.com/intl/de/reference/android/provider/MediaStore.Images.Media.html
 http://www.androidpub.com/233509
 
83. BITMAP 사이즈 줄이고 늘리기
 http://vissel.tistory.com/63
 
84. byte[]->bitmap변환시, Factory returned null메시지
 http://www.androidpub.com/370300
 http://code.google.com/p/android/issues/detail?id=823
 
85. Android Supported Media Formats
 http://developer.android.com/intl/de/guide/appendix/media-formats.html
 
86. Mastering_the_Android_Media_Framework
 (MediaPlayer Problems And Solutions 포함)
 http://docs.huihoo.com/google/io/2009/Mastering_the_Android_Media_Framework.pdf
 
87. YUV420 to RGB565 conversion in Android
 http://blog.tomgibara.com/post/132956174/yuv420-to-rgb565-conversion-in-android
 
88. Ffmpeg for android
 http://gitorious.org/~olvaffe/ffmpeg/ffmpeg-android
 http://zimly.tistory.com/entry/FFMPEG-on-Android
 http://slworkthings.wordpress.com/2010/02/23/ffmpeg-and-android-mk/
 http://groups.google.com/group/prajnashi
 
89. H.264 Stream 분석
 http://blog.daum.net/_blog/BlogTypeView.do?blogid=0LwKe&articleno=6633262&categoryId=697812&regdt=20100412175346#ajax_history_home
 http://blog.naver.com/onlyou_4ever/40048828597
 
90. Broadcasting video with Android - without writing to local files
 http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system
 
91. 자바 튜토리얼
 http://www.javadom.com/tutorial/
 http://www.javadom.com/tutorial/serialize/
 http://www.javadom.com/tutorial/serialize/htonl.html
 http://www.passncool.com/tt/entry/New-IO-Buffers
 
92. 자바와 C 사이의 SOCKET 통신 (BYTE로 통신,보너스로 LITTLE ENDIAN까지)
 http://shonm.tistory.com/category/JAVA/C와%20JAVA%20의%20SOCKET%20통신%20(LITTLE%20ENDIAN)
 
93. 자바 1.4의 새로운 입출력, NIO API 1부 - 버퍼와 채널
 http://javacan.tistory.com/entry/73
 
94. 안드로이드 내장 APKs 개발방법(초안)
 http://www.kandroid.org/board/board.php?board=androidsource&command=body&no=64
 
95. byte[] image data in onPreviewFrame can Cause out of memory
 http://code.google.com/p/android/issues/detail?id=4360
 
96. [안드로이드] Bitmap , Byte 간의 변환
 http://blog.ehxm.net/91
 
97. Android PC Remote Control
 http://androidpcremotecontrol.googlecode.com/files/image01.pdf
 
98. How to restart video preview after the surfaceDestroyed()?
 http://stackoverflow.com/questions/1073293/android-how-to-restart-video-preview-after-the-surfacedestroyed
 
99. Google Android Camera Focusing Issue
 http://everyjoe.com/technology/google-android-camera-focusing-issue/
 
100. 안드로이드 소스를 보고 싶으면??
 http://androidhuman.tistory.com/232
 http://hightin.tistory.com/16
 http://mokiya.tistory.com/51

다음내용은 여기서 'http://blog.teamsm.com/3' 여기서 발취 하였습니다.
 

package kyy.tt.test;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;

public class TimerTest extends Activity {
/** Called when the activity is first created. */
private Timer testtimer;
private myTask mtask = null;
private Handler handler;
private Runnable run;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        handler = new Handler();
        run = new Runnable(){
        @Override
            public void run()   
            {
            Log.i("test","run");
            Toast.makeText(TimerTest.this, "3초후에 뜹니다.!!!", 0).show();
            }    
        };
         
testtimer = new Timer();
mtask = new myTask();
testtimer.schedule(mtask,3000, 3000);  // 0.1 초의 시간뒤 0.1초 마다 mtask의 run 을 호출함

    }
    @Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
testtimer.cancel(); // 타이머를 멈춤
 
}
    
    class myTask extends TimerTask
    {
    @Override
    public void run()    
    {
    handler.post(run);  
    } //Handler 을 이용하여 Runnable 를 실행함 상황에 맞게 사용할것
    }
}

본소스에 제작권은 라플에 있습니다.
안드로이드폰을 처음 사용하시는분들을 위한 정말 유용한 어플같아서 이렇게 소개를 할까 한다.
스마트폰을 처음 접하게 되면 노래는 어떻게 넣을까? 벨소리는 어떻게 하지? USB이거 모야, WIFI아 모르겠다.
하면서 한탄하면서 주의사람들에게 어디서 배우냐 카페는 어디로 가입해야하냐 하면서 하시는분들 있을것이다.
이제 고민끝 이 어플 하나면 땡인것 같다.

1. 메인화면


2. 메뉴화면

초급, 중급, 고급, 환경설정, 추천웹, 추천어플로 메뉴가 구성되어 있어 직관적이고 처음사서 모르는부분들을 세세히 알수도 있고 가끔모르는 기능도 스샷으로잘 찍어두어서 두고두고 사용할수 있을것 같음.




3. 초급화면

초급화면에 일부분인데 초보자 가이드에 주인공 안박사가 나와서 하나하나 강의를 하는식으로 되어 있어 처음하는 사람들도 금방 친해질 수 있는것 같아서 좋은것 같음.


4. 추천어플

추천어플 메뉴는 안드로이드를 사용하면서 가장 많이쓰는 필수어플을 나열해 두어서 클릭하여 바로바로 받을 수 있게 되어 정말 좋은것 같다. 또한 항목을 클릭하면 받을것 인지 물어보는 부분도 사용자에 대한 작은배려 인것 같아서 너무 좋았던거 같다.


이외 메뉴도 괜찮은 기능들이 많았는데 스샷을 제공하지 않아서 적지 못한점이 아쉽다. 아래QR코드를 스캔하여 얼릉 다운받아 보자. 후회하지 않은 선택이 될 것이다.






Network ( 지원 프로토콜 ) - Android / iPhone

- http (웹)

- tcp / ip (소켓)

- soap (XML 웹서비스)

cf) 하이브리드 앱

앱 > 웹

- 앱과 웹 차이점

Application(10%) -----> Web Application(90%)

구분

속도

빠르다.

느리다.(장소마다)

제약사항

적다.

많다.

의존성

많다.

적다.(HTML5[통일/RIA]) by W3C

적다.

많다.

유지보수

어렵다.

쉽다.

W3C : 인터넷의 표준을 만드는 단체(곳,ORG)

3G -> 4G(40배/디바이스 성능 향상)

클라이언트 <-> 서버(웹/어플리케이션) <-> DB

Android <-> [V - C - M] <-> DBMS

Android [V] <-> [C - M] <-> DBMS

V -> XXX.jsp

C -> XXX.java (Servlet)

M -> XXX.java (Bean)

(My Platform / trutsform / 가우스)Struts, Spring, Ejb,

iBATIS, Hybernate, JQuery

웹브라우져는 해석기(html/javascript/css)다.

html/javascript/css -> 상품 (Client side language)

자바 웹서버(Tomcat)은 jsp/servlet(java) 해석기다.

jsp/servlet -> 공장 ( servlet side language )

1. 지시어

2. 스크립팅 엘리먼트

3. JSP액션 = 표준태그 = 액션원소

4. EL

5. JSTL

6. CTL

토요일/일요일
Android 예제 - 분석 

NetWork (월~화)

1. tcp/ip

2. map(LBS)

3. sqlite, preference

4. 팀구성

Market 개발자/등록 ( $25 비자/마스터) - 수

기획서 발표 -> 금요일

public class Io03 extends Activity {
    private Button b1, b2, b3;
    private EditText et1;
    //private static final String FNAME = "test.txt";
    private static final String FNAME 
       = "aa/bb/SoosJava201104_utf8.java";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        b1 = (Button)findViewById(R.id.Button01);
        b2 = (Button)findViewById(R.id.Button02);
        b3 = (Button)findViewById(R.id.Button03);
        
        et1 = (EditText)findViewById(R.id.EditText01);
        
        View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v == b1){
readAssets();
}else if(v == b2){
readRaw();
}else{
reset();
}
}
} ;
        b1.setOnClickListener(listener);
        b2.setOnClickListener(listener);
        b3.setOnClickListener(listener);
    }
    private void readAssets(){
    InputStream is = null;
    AssetManager am = getAssets();
    try{
       is = am.open(FNAME, MODE_PRIVATE);
       String result = readModul(is);
       et1.setText(result);
    }catch(IOException ie){
    }finally{
    try{
    if(is != null) is.close();
    }catch(IOException ie){}
    }
    }
    private void readRaw() {
    InputStream is = null;
    Resources r = getResources();
    is = r.openRawResource(R.raw.soosadvans_utf8);
    String result = readModul(is);
    et1.setText(result);
    try{
    if(is != null) is.close();
    }catch(IOException ie){}
    }
    private String readModul(InputStream is){
    BufferedReader br = null;
    String line = "";
    StringBuffer sb = new StringBuffer();
    try{
       br = new BufferedReader(new InputStreamReader(is));
       while((line = br.readLine()) != null){
        sb.append(line + "\n");
       }
       return sb.toString();
    }catch(IOException ie){
    return "";
    }finally{
    try{
    if(br != null) br.close();
    }catch(IOException ie){}
    }
    }
    private void reset(){
    et1.setText("");
    }
}
public class Io02 extends Activity 
implements View.OnClickListener {
    private Button b1, b2, b3, b4;
    private EditText et1, et2, et3;
    //private static final String EX_PATH = "/sdcard";
    private static final String EX_PATH 
        = Environment.getExternalStorageDirectory().getAbsolutePath();
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        et1 = (EditText)findViewById(R.id.EditText01);
        b1 = (Button)findViewById(R.id.Button01);
        
        et2 = (EditText)findViewById(R.id.EditText02);
        b2 = (Button)findViewById(R.id.Button02);
        b3 = (Button)findViewById(R.id.Button03);
        
        et3 = (EditText)findViewById(R.id.EditText03);
        b4 = (Button)findViewById(R.id.Button04);
        
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
        b4.setOnClickListener(this);
        
        //showPath();//특정 하드웨어에 의존하지 않게 android의 기준 Directory 찾기
    }
    @Override
public void onClick(View v) {
if(v == b1){
toInFromEx(); //1. 외장 -> 내장 
}else if(v == b2){ 
//inFileListShow();
String fname = et2.getText().toString();
toExFromIn(fname); //2. 내장(현재앱) -> 외장 
}else if(v == b3){
toExFromInAll();
}else{ //v == b4
String fname = et3.getText().toString();
toExFromInAny(fname); //3. 내장(현재앱X) -> 외장 
}
}
    //3. 내장(현재앱X) -> 외장 ( 추후 고민해 볼 것! )
    private void toExFromInAny(String fname){ //테스팅 결과 확인X 
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try{
    fis = new FileInputStream(fname);
   
    String destDir = EX_PATH + "/io/apks";
    File dir = new File(destDir);
    if(!dir.exists()) dir.mkdirs();
   
    fos = new FileOutputStream(destDir+"/"+fname);
    fileMove(fis, fos);
    }catch(FileNotFoundException fnfe){
    }catch(IOException ie){
    try{
    if(fos != null) fos.close();
    if(fis != null) fis.close();
    }catch(IOException ie2){}
    }
    }
    
    //2. 내장(현재앱) -> 외장 
    private void inFileListShow(){
    StringBuffer sb = new StringBuffer();
    File inFilesDir = getFilesDir(); //중요!
    File childs[] = inFilesDir.listFiles();
    for(File child : childs){
    sb.append(child.getName() + "\n");
    }
    showMsg(sb.toString(), 1);
    }
    private void toExFromIn(String fname){
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try{
    fis = openFileInput(fname);
   
    String destDir = EX_PATH + "/aa/bb/cc";
    File dir = new File(destDir);
    if(!dir.exists()) dir.mkdirs();
   
    fos = new FileOutputStream(destDir+"/"+fname);
    fileMove(fis, fos);
    }catch(FileNotFoundException fnfe){
    }catch(IOException ie){
    try{
    if(fos != null) fos.close();
    if(fis != null) fis.close();
    }catch(IOException ie2){}
    }
    }
    private void toExFromInAll(){
    File inFilesDir = getFilesDir(); //중요!
    File childs[] = inFilesDir.listFiles();
    for(File child : childs){
    toExFromIn(child.getName());
    }
    showMsg("모든 파일 복사 완료", 1);
    }
    
    //1. 외장 -> 내장
    private void toInFromEx(){
    //et1의 입력정보(dir/file)를 내장메모리로 이동시키시요.
    String path = et1.getText().toString();
    File f = new File(EX_PATH + path);
   
    if(f.isFile()){
    fileCopy(f, getFname(path));
    }else{
    File fs[] = f.listFiles();
    for(File child : fs){
    if(child.isFile()){
    fileCopy(child, child.getName());
    }
    }
    }
    }
    private String getFname(String path){
    int idx = path.lastIndexOf("/");
    String fname = "";
    if(idx != -1){
    fname = path.substring(idx+1);
    }
    return fname;
    }
    private void fileCopy(File f, String fname){
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try{
    fis = new FileInputStream(f);
    fos = openFileOutput(fname, MODE_PRIVATE);
    fileMove(fis, fos);
    }catch(FileNotFoundException fnfe){
    showMsg("입력 경로가 잘못됨", 0);
    et1.setText("");
    et1.requestFocus();
    }catch(IOException ie){
    showMsg("IO예외", 0);
    }
    }
    private void fileMove(FileInputStream fis, 
    FileOutputStream fos) throws IOException  {
    int i = 0; 
    byte buffer[] = new byte[512];
    while((i = fis.read(buffer)) != -1){
    fos.write(buffer, 0, i);
    fos.flush();
    }
    showMsg("파일 복사 성공",  0);
    }
    /*
    File f1; //sdcard 
    File f2; //system 
    File f3; //data
    File f4; //cache 
    void showPath(){
    f1 = Environment.getExternalStorageDirectory();// sdcard
    String state = Environment.getExternalStorageState(); //mounted, shared
    String path1 = f1.getAbsolutePath();
    String path2 = "";
    try{
    path2 = f1.getCanonicalPath(); //OS 시스템에 맞는 구분자 적용한 경로
    }catch(IOException ie){}
    String path3 = f1.getPath();
   
    showMsg("path1 : " + path1 
    + ", path2 : " + path2 
    + ", path3 : " + path3 
    + ", state : " + state, 1);
   
    f2 = Environment.getRootDirectory(); //system 
    f3 = Environment.getDataDirectory(); //data
    f4 = Environment.getDownloadCacheDirectory(); //cache
    String f2Path = f2.getAbsolutePath();
    String f3Path = f3.getAbsolutePath();
    String f4Path = f4.getAbsolutePath();
   
    showMsg("f2Path : " + f2Path 
        + ", f3Path : " + f3Path
        + ", f4Path : " + f4Path, 1);
    }
    */
    void showMsg(String msg, int option){
    Toast.makeText(this, msg, option).show();
    }
}

'스마트폰 > 안드로이드' 카테고리의 다른 글

안드로이드, 아이폰 Network 정리  (0) 2011.05.13
InputOutputStream_3 공부.  (0) 2011.05.13
InputOutputStream_1 공부.  (0) 2011.05.13
다이얼로그박스 공부.  (0) 2011.05.13
다이나믹 레이아웃 공부.  (0) 2011.05.13
//1. 내장 메모리 핸들링
public class Io01 extends Activity 
implements View.OnClickListener {
    private Button b1, b2, b3, b4, b5;
    private EditText et;
    private static final String FNAME = "aa\\bb\\save.txt";
    private static final String DPATH = "aa/bb";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        et = (EditText)findViewById(R.id.EditText01);
        b1 = (Button)findViewById(R.id.Button01);
        b2 = (Button)findViewById(R.id.Button02);
        b3 = (Button)findViewById(R.id.Button03);
        b4 = (Button)findViewById(R.id.Button04);
        b5 = (Button)findViewById(R.id.Button05);
        
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
        b4.setOnClickListener(this);
        b5.setOnClickListener(this);
    }
    @Override
    public void onStart(){
    super.onStart();
    read();
    }
    @Override
    public void onStop(){
    super.onStop();
    write(); reset();
    }
    @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.Button01: read(); break;
case R.id.Button02: write(); reset(); break;
case R.id.Button03: reset(); break;
case R.id.Button04: del(); reset(); break;
case R.id.Button05: makeDir(); break;
}
}
    private void read(){
    //저장된 파일을 읽어 오세요.
    FileInputStream fis = null;
    BufferedReader br = null;
    String line = "";
    StringBuilder sb = new StringBuilder();
    try{
    fis = openFileInput(FNAME);
    br = new BufferedReader(
    new InputStreamReader(fis), 512);
    while((line = br.readLine()) != null){
    sb.append(line + "\n");
    }
    et.setText(sb.toString());
    }catch(IOException ie){
    }finally{
    try{
    if(br != null) br.close();
    if(fis != null) fis.close();
    }catch(IOException ie){}
    }
    }
    private void write(){
    FileOutputStream fos = null;
    PrintWriter pw = null;
    String data = null;
    try {
    fos = this.openFileOutput(FNAME , MODE_PRIVATE);
    pw = new PrintWriter(fos, true);
    data = et.getText().toString();
    if(data != null) data = data.trim();
    if(data.length() != 0){
    pw.println(data);
    showMsg(FNAME + " 파일에 쓰기 성공");
    }
    }catch(FileNotFoundException fnfe){
    showMsg(FNAME + " 파일을 찾을 수 없음");
    }finally{
    try{
    if(pw != null) pw.close();
    if(fos != null) fos.close();
    }catch(IOException ie){}
    }
    }
    private void reset(){
    et.setText("");
    }
    private void del(){
    //파일(save.txt) 삭제 구현 
    deleteFile(FNAME);
    showMsg(FNAME + "이란 파일 삭제 완료");
    }
    private void makeDir(){
    File f = new File("/data/data/soo.io.test1/files/"+DPATH);
    if(!f.exists()){
    f.mkdirs();
    showMsg(DPATH+"이란 디렉토리 생성 완료");
    }
    }
    private void showMsg(String str){
    Toast.makeText(this, str, 0).show();
    }
}

'스마트폰 > 안드로이드' 카테고리의 다른 글

InputOutputStream_3 공부.  (0) 2011.05.13
InputOutputStream_2 공부.  (0) 2011.05.13
다이얼로그박스 공부.  (0) 2011.05.13
다이나믹 레이아웃 공부.  (0) 2011.05.13
Toast 토스트 공부.  (0) 2011.05.13
public class DialogT extends Activity {
    private Button b1, b2, b3, b4, b5, b6, b7;
    private LinearLayout ll;
    private EditText et, et2;
    private TextView tv;
    boolean flag = false;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        b1 = (Button)findViewById(R.id.Button01);
        b2 = (Button)findViewById(R.id.Button02);
        b3 = (Button)findViewById(R.id.Button03);
        b4 = (Button)findViewById(R.id.Button04);
        b5 = (Button)findViewById(R.id.Button05);
        b6 = (Button)findViewById(R.id.Button06);
        b7 = (Button)findViewById(R.id.Button07);
        
        et = (EditText)findViewById(R.id.EditText01);
        et2 = (EditText)findViewById(R.id.EditText02); // 받는 메세지
        
        tv = (TextView)findViewById(R.id.TextView01);
        tv.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE);
        
        tv.setOnClickListener(new View.OnClickListener() {
        int endleng = tv.getText().length();
        int startleng = 0;

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//tv.setBackgroundColor(Color.BLACK);
//tv.setHighlightColor(color.background_dark);
//tv.setLinkTextColor(color.background_dark);
if(flag==false){
tv.setHighlightColor(Color.YELLOW);
Spannable str = (Spannable)tv.getText();
   str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 
    0, endleng, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
   str.setSpan(new ForegroundColorSpan(0xFFFFFF00), 0, endleng,
                            Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
tv.setText(str);
flag = true;
}else{
Spannable str = (Spannable)tv.getText();
   str.setSpan(new BackgroundColorSpan(Color.BLACK), 
    0, endleng, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
   
tv.setText(str);
flag = false;
}

}
});
        
        ll = (LinearLayout)findViewById(R.id.LinearLayout01);      
        
        View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.Button01: d1(); break;
case R.id.Button02: d2(); break;
case R.id.Button03: d3();break;
case R.id.Button04: d4();break;
case R.id.Button05: d5();break;
case R.id.Button06: d6();break;
case R.id.Button07: d7();break;
}
}
};
        b1.setOnClickListener(listener);
        b2.setOnClickListener(listener);
        b3.setOnClickListener(listener);
        b4.setOnClickListener(listener);
        b5.setOnClickListener(listener);
        b6.setOnClickListener(listener);
        b7.setOnClickListener(listener);
        
    }
    private View v;
    private EditText cet1,cet2,cet3,cet4;
    private Button cb1,cb2,cb3,cb4;
    private void initCustom(){
    //v = View.inflate(DialogT.this, R.layout.custom, (ViewGroup)findViewById(R.id.LinearLayout02));
    v = View.inflate(this, R.layout.custom, null);
   
    cet1 = (EditText)v.findViewById(R.id.EditTextD01);
    cet2 = (EditText)v.findViewById(R.id.EditTextD02);
    cet3 = (EditText)v.findViewById(R.id.EditTextD03);
    cet4 = (EditText)v.findViewById(R.id.EditTextD04);
   
    cb1 = (Button)v.findViewById(R.id.ButtonD01);
    cb2 = (Button)v.findViewById(R.id.ButtonD02);   
    cb3 = (Button)v.findViewById(R.id.ButtonD03);   
    cb4 = (Button)v.findViewById(R.id.ButtonD04);   
   
    View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.ButtonD01:
et2.setText(cet1.getText().toString());
break;
case R.id.ButtonD02:
et2.setText(cet2.getText().toString());
break;
case R.id.ButtonD03:
et2.setText(cet3.getText().toString());
break;
case R.id.ButtonD04:
et2.setText(cet4.getText().toString());
break;
}
}
};
    cb1.setOnClickListener(listener);
    cb2.setOnClickListener(listener);
    cb3.setOnClickListener(listener);
    cb4.setOnClickListener(listener);
   
    }
    private void d1(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.elephant);
    builder.setTitle("주의");
    builder.setMessage("졸지 맙시다.");
    builder.show();
    }
    private void d2(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.elephant);
    builder.setTitle("캠페인");
    builder.setMessage("아침밥은 먹고 다닙시다.");
    builder.setNeutralButton("확인", null);
    builder.show();
    }
    private void d3(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.giraffe);
    builder.setTitle("질의");
    builder.setMessage("당신은 여성입니까?");
    DialogInterface.OnClickListener listener2 = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showMsg("which : " + which);
if(which == -1){
showMsg("당신은 여성입니다.");
}else{
showMsg("당신은 남성입니다.");
}
}
};
    builder.setPositiveButton("예", listener2);
    builder.setNegativeButton("아니요", listener2);
    builder.show();
   
    }
    private void d4(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.giraffe);
    builder.setTitle("배경색");
    builder.setMessage("배경색으로 좋아하는 색깔은?");
    DialogInterface.OnClickListener listener2 = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showMsg("which : " + which);
if(which == -1){
b4.setBackgroundColor(Color.RED);
ll.setBackgroundColor(Color.CYAN);
}else if(which == -3){
b4.setBackgroundColor(Color.YELLOW);
ll.setBackgroundColor(Color.DKGRAY);
}else{
b4.setBackgroundColor(Color.BLUE);
ll.setBackgroundColor(Color.GREEN);
}
}
};
    builder.setPositiveButton("빨강", listener2);
    builder.setNeutralButton("노랑", listener2);
    builder.setNegativeButton("파랑", listener2);
    builder.show();
   
    }
    static final String JOBS[] = {"변리사","변호사","검사","판사","개발자",
     "기획자","디자이너","의사","선생님","프로게이머"};
    private void d5(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.guitar);
    builder.setTitle("당신의 직업은?");
    builder.setSingleChoiceItems(JOBS, 0, 
    new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
// 직업을 바꾸세요.
showMsg("which : " + which);
et.setText("내 직업은"+ JOBS[which] + "입니다.");
}
});
   
    builder.setNeutralButton("확인", null);
    builder.show();
    }
    static final String HOBBYS[] = {"영화","음악","낚시","게임","골프", "수영"};
    static final boolean flags[] = {false,false,false,false,false,false,};
String str="";
    private void d6(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.mammoth);
    builder.setTitle("당신의 취미는 무엇인가요?");
    builder.setMultiChoiceItems(HOBBYS, flags, 
    new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// TODO Auto-generated method stub
//showMsg("XX 선택됨");
//showMsg("XX 해제됨");
if(isChecked){
//str += HOBBYS[which] + " ";
showMsg("'" + HOBBYS[which] +"'선택됨");
}else{
showMsg("'" + HOBBYS[which] +"' 해제됨");
}
}
});
   
    builder.setNeutralButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
for(int i=0; i<HOBBYS.length; i++){
if(flags[i] == true)
str += HOBBYS[i] + " ";
}
showMsg("당신의 취미는 "  + str + "입니다.");
}
});
    builder.show();
    }

    private void d7(){
    // 커스텀 다이얼로그를 띄우시오.
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.mammoth);
    builder.setTitle("커스텀 다이얼로그");
    builder.setNeutralButton("확인", null);
    builder.setNegativeButton("취소",null);
    initCustom();
    builder.setView(v);
    builder.show();
    }
    private void showMsg(String msg){
    Toast.makeText(this, msg, 0).show();
    }
    public DialogT() {
// TODO Auto-generated constructor stub
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setIcon(R.drawable.mammoth);
    builder.setTitle("종료");
    builder.setNeutralButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
finish();
}
});
    builder.setNegativeButton("취소",null);
    builder.setView(v);
    builder.show();
}
return false;
}
}

'스마트폰 > 안드로이드' 카테고리의 다른 글

InputOutputStream_2 공부.  (0) 2011.05.13
InputOutputStream_1 공부.  (0) 2011.05.13
다이나믹 레이아웃 공부.  (0) 2011.05.13
Toast 토스트 공부.  (0) 2011.05.13
Notification 공부.  (0) 2011.05.13

+ Recent posts