Microsoft PowerPoint - 09 NFCDemo 예제 분석.pptx

Size: px
Start display at page:

Download "Microsoft PowerPoint - 09 NFCDemo 예제 분석.pptx"

Transcription

1 android21 NFCDemo 예제분석 Café.naver.com/android21 김태성

2 NdefMessage 구조 NDEF란? NFC Data Exchange Format NFC 데이터통신프레임형식 NdefMessage 구조 - 단일 Record 구조 (Record 1 개 ) NdfRecord[0] - 다중 Record 구조 NdefRecord[0] NdefRecord[1] NdefRecord[2]... Record -내부 foramt에따라 Uri, Text, SmartPoster등규격에맞게여러가지정보포함가능 -위 3가지이외에도규격서를보면더다양한 format 존재 url 참고 - forum org/specs/ 2

3 주요클래스 SmartPoster, TextRecord, UriRecord Class Record 에담긴정보의형식을나타내는클래스 소스코드에서주요한부분 parse 메소드 getview 메소드 3

4 AndroidManifest.xml 1/2 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" package="com.example.android.nfc"> com.example.android.nfc <!-- NFC 사용권한, 전화걸기권한허가 --> <uses-permission android:name="android.permission.nfc" /> <uses-permission android:name="android.permission.callp _ PHONE" /> <application android:icon="@drawable/icon" g <! 메인액티비티 FakeTagsActivity 등록--> <activity android:name=".simulator.faketagsactivity" android:theme="@android:style/theme.notitlebar"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" " d i t t t /> </intent-filter> </activity> it > 4

5 AndroidManifest.xml 2/2 <! 태그정보를표시할액티비티 TagViewer 등록--> <activity android:name="tagviewer" <! 태그를인식했을때표시되는액티비티 -> <intent-filter> <action android:name="android.nfc.action.tag_discovered" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> </application> <! 진저브레드이상에서 NFC 지원 --> <uses-sdk android:minsdkversion="9" /> <! NFC 디바이스사용등록--> <uses-feature android:name= "android.hardware.nfc" nfc" android:required= "true" /> </manifest> 5

6 res\layout\tag_divider.xml <?xml version="1.0" encoding="utf-8"?> <! 리스트항목에표시될레이아웃 -> <View xmlns:android=" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/listdivider" /> 6

7 res\layout\tag_text.xml <?xml version="1.0" encoding="utf-8"?> <! Text 태그를인식했을때표시할레이아웃-> <TextView xmlns:android=" android:layout_width="match_parent" " h " android:minheight="?android:attr/listpreferreditemheight" android:layout_height="wrap_content" android:padding="4dip" ddi " android:textappearance="?android:attr/textappearancemedium" android:maxlines="5" android:ellipsize="end" end android:gravity="center_vertical" /> 7

8 res\layout\tag_viewer.xml <?xml version="1.0 0" encoding="utf utf-8 8"?> <! 태그뷰어액티비티의레이아웃--> <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <! 태그타이틀한줄표시 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleline="true" android:textappearance="?android:attr/textappearancemedium" android:textstyle="bold" android:shadowcolor="#bb000000" android:shadowradius="2.75" android:gravity="center_vertical" /> <! 스크롤가능하게내용표시 --> <ScrollView android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1"> i <LinearLayout android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" /> </ScrollView> </LinearLayout> 8

9 사운드리소스파일 태그인식사운드파일 태그를인식했을때플레이할사운드 res\raw\discovered_tag_notification.ogg 9

10 \res\values\strings.xml <?xml version="1.0" encoding="utf-8"?> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <! 앱의이름 --> <string name="app_name">nfcdemo</string> <! 태그가인식되었을때타이틀바에표시할액티비티의이름 --> <string name="title_scanned_tag">new tag collected</string> <! 텍스트형태그의제목 --> <string name="tag_text">text</string> </resources> 10

11 \src\com\example\android\nfc\ 소스파일및디렉토리 record : 태그데이터형식정보포함디렉토리 simulator : 메인액티비티포함 NdefMeeesgeParser : 인식된 Tag 의데이터분석클래스 TagViewer : 인식된태그표시액티비티 11

12 NFCDemo 소스코드분석 12

13 인식된태그정보표시액티비티 TAGVIEWER.JAVA 13

14 TagViewer.java 016: package com.example.android.nfc; 017: // 태그가인식되면정보를보여주는액티비티 018: import android.app.activity; 019: import android.content.intent; 020: import android.nfc.ndefmessage; 021: import android.nfc.ndefrecord; 022: import android.nfc.nfcadapter; 023: import android.os.bundle; 024: import android.os.parcelable; 025: import android.util.log; 026: import android.view.layoutinflater; 027: import android.view.windowmanager; 028: import android.widget.linearlayout; 029: import android.widget.textview; 030: 031: import com.example.android.nfc.record.parsedndefrecord; // 사용자구현 032: 033: import java.util.list; 034: 14

15 TagViewer.java 035: /** 036: * 스마트폰으로방금인식된새태그의브로드캐스트관리액티비티 038: */ 039: public class TagViewer extends Activity { 040: 041: static final String TAG = "ViewTag"; 042: 043: /** 044: * 이액티비티는사용자가아무것도하지않은경우자동종료 046: */ 047: static final int ACTIVITY_TIMEOUT_MS = 1 * 1000; // 1초대기 048: 049: TextView mtitle; // 태그의타이틀표시 050: 051: LinearLayout mtagcontent; // 태그의내용표시 052: 054: protected void oncreate(bundle savedinstancestate) { // 생성자 055: super.oncreate(savedinstancestate); 056: setcontentview(r.layout.tag_viewer); 057: mtagcontent t = (LinearLayout) L findviewbyid(r.id.list); id // 태그내용표시 058: mtitle = (TextView) findviewbyid(r.id.title); // 태그타이틀표시 059: resolveintent(getintent()); // 이액티비티가실행될때받았던인텐트분석후처리사용자메소드 060: } 061: 15

16 TagViewer.java 062: void resolveintent(intent intent) { 063: // 인텐트파싱 064: String action = intent.getaction(); 065: if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) _ ( { 066: // 태그가인식되면저장하기위해서비스를호출한다. 067: // PendingIntent를같이보내서다시내가불리게한다. 068: // 다시불릴때는 onnewintent() 호출되는데 069: // 그때 DB에서읽어서화면에표시한다. 070: Parcelable[] rawmsgs = intent.getparcelablearrayextra( NfcAdapter.EXTRA_NDEF_MESSAGES); NDEF 071: NdefMessage[] msgs; 072: if (rawmsgs!= null) { 073: msgs = new NdefMessage[rawMsgs.length]; 074: for (int i = 0; i < rawmsgs.length; i++) { // 모든태그메시지빼내기 075: msgs[i] = (NdefMessage) rawmsgs[i]; 076: } 16

17 TagViewer.java 077: } else { 078: // 알수없는태그형식일경우표시할메시지준비 079: byte[] empty = new byte[] {}; 080: NdefRecord record = new NdefRecord( NdefRecord.TNF_UNKNOWN, empty, empty, empty); 081: NdefMessage msg = new NdefMessage(new NdefRecord[] {record}); 082: msgs = new NdefMessage[] {msg}; 083: } 084: // 뷰설정하기 085: settitle(r.string.title_scanned_tag); string title scanned tag); // 인텐트에서빼낸정보화면표시 086: buildtagviews( msgs ); // 뷰에태그표시사용자메소드 087: } else { 088: Log.e(TAG, "Unknown intent " + intent); 089: finish(); 090: return; 091: } 092: } 093: 17

18 TagViewer.java 094: void buildtagviews(ndefmessage[] msgs) { // 태그정보화면표시 095: if (msgs == null msgs.length == 0) { 096: return; 097: } 098: LayoutInflater inflater = LayoutInflater.from(this); 099: LinearLayout content = mtagcontent; 100: // 연속으로두개태그를인식할수있기때문에 101: // 내용표시영역에이전내용을지운다. 102: content.removeallviews(); 103: // 리스트에첫번째메시지를 Parse 104: // 모든 sub 레코드의뷰들을생성 105: List<ParsedNdefRecord> records = NdefMessageParser.parse(msgs[0]); 106: final int size = records.size(); 107: for (int i = 0; i < size; i++) { // 모든나머지레코드에대해 108: ParsedNdefRecord record = records.get(i); 109: content.addview(record.getview(this, t d tvi (thi inflater, content, t i)); 110: inflater.inflate(r.layout.tag_divider, content, true); // 뷰생성 111: } 112: } 18

19 TagViewer.java 113: 115: public void onnewintent(intent intent) { // 새인텐츠가왔을때 116: setintent(intent); // 현재인텐츠로설정하고처리 117: resolveintent(intent); 118: } 119: 121: public void settitle(charsequence ence title) { // 타이틀설정 122: mtitle.settext(title); 123: } 124: } 19

20 태그메시지파서클래스 NDEF MESSAGE PARSER.JAVA 20

21 NdefMessageParser.java 016: package com.example.android.nfc; 017: 018: import android.nfc.ndefmessage; 019: import android.nfc.ndefrecord; 020: 021: import com.example.android.nfc.record.parsedndefrecord; 022: import com.example.android.nfc.record.smartposter; 023: import com.example.android.nfc.record.textrecord; android nfc record 024: import com.example.android.nfc.record.urirecord; 025: 026: import java.util.arraylist; 027: import java.util.list; 028: 029: /** 030: * ParsedNdefMessage들을만드는유틸리티클래스 031: */ 032: public class NdefMessageParser { 033: 034: // 생성자에서하는일은없음 035: private NdefMessageParser() { 036: 037: } 038: 21

22 NdefMessageParser.java 039: /** NdefMessage 파싱하기 */ 040: public static List<ParsedNdefRecord> parse(ndefmessage message) { 041: return getrecords(message.getrecords()); 042: } // NDEF 메시지에있는모든레코드를해체해서리스트로반환한다. 043: 044: public static List<ParsedNdefRecord> getrecords(ndefrecord[] records) { 045: List<ParsedNdefRecord> elements = new ArrayList<ParsedNdefRecord>(); 046: for (NdefRecord record : records) { // 모든레코드에대해 047: if (UriRecord.isUri(record)) { // URI 인경우 048: elementsadd(urirecord elements.add(urirecord.parse(record)); 049: } else if (TextRecord.isText(record)) { // 단순텍스트인경우 050: elements.add(textrecord.parse(record)); 051: } else if (SmartPoster.isPoster(record)) t P t ( { // 스마트포스터인경우 052: elements.add(smartposter.parse(record)); 053: } 054: } 055: return elements; 056: } 057: } 22

23 인터페이스 \RECORD\PARSEDNDEFRECORD.JAVA 23

24 \record\parsedndefrecord.java 017: package com.example.android.nfc.record; android nfc record; 018: 019: import android.app.activity; 020: import android.view.layoutinflater; 021: import android.view.view; 022: import android.view.viewgroup; 023: 024: 025: public interface ParsedNdefRecord { // URI든 Text든 Poster든공통구현 026: 027: /** 028: * 현재레코드를화면에표시하기위해반환 029: */ 030: public View getview(activity activity, LayoutInflater inflater, ViewGroup parent, 031: int offset); 032: 033: } 24

25 태그레코드형식 \RECORD\ SMART POSTER.JAVA 25

26 \record\smartposter.java 016: package com.example.android.nfc.record; 017: 018: import android.app.activity; 019: import android.nfc.formatexception; // NFC 패키지 020: import android.nfc.ndefmessage; f 021: import android.nfc.ndefrecord; 022: import android.view.layoutinflater; 023: import android.view.view; 024: import android.view.viewgroup; 025: import android.view.viewgroup.layoutparams; 026: import android.widget.linearlayout; 027: 028: import com.google.common.base.charsets; // 구아바패키지 029: import com.google.common.base.preconditions; 030: import com.google.common.collect.immutablemap; common collect 031: import com.google.common.collect.iterables; 032: 033: import com.example.android.nfc.ndefmessageparser; 034: import com.example.android.nfc.r; 035: 036: import java.util.arrays; 037: import java.util.nosuchelementexception; iln E i 038: 26

27 \record\smartposter.java 039: /** 040: * NFC 포럼의 "Smart Poster 에대한설명 041: */ 042: public class SmartPoster implements ParsedNdefRecord { 043: 044: /** 045: * NFC Forum의 Smart Poster 레코드형식은 section 에정의 046: * 047: * 서비스에대한 Title record인데, 서비스는여러가지언어를사용할수있지만 048: * 언어필드는절대반복되어전송해서는안됨. 049: * 이 record 는옵션이므로사용하지않아도됨. 050: */ 051: private final TextRecord mtitlerecord; 052: 053: /** 054: * NFC Forum의 Smart Poster Record 형식은 section 에정의 055: * 056: * URI record 는 Smart Poster 의핵심이다. 057: * 모든다른레코드들은이레코드에대한 meta( 보조 ) 데이터이다. 058: * 반드시하나의 URI 레코드만있어야하며하나를넘어도안된다. 059: */ 060: private final UriRecord murirecord; :

28 \record\smartposter.java 062: /** 063: * NFC Forum의 Smart Poster Record 형식 section 에정의 064: * 065: * Action record는서비스가어떻게처리되어야하는지는나타낸다. 066: * 예를들면 action을디바이스가 URI의북마크를저장하거나웹브라우저를 067: * 열어야한다는것을나타낼수있다. Action record는옵션이다. 068: * 만약없을경우디바이스는서비스를통해어떻게처리할지결정한다. 069: * 만약액션레코드가있으면, 가장우선적으로처리한다. 070: * UI 디자이너가이를무시할수있지만, 071: * 그러면디바이스사이의사용자편의에차이가발생할수있다. 072: */ 073: private final RecommendedAction maction; 074: 075: /** 076: * NFC Forum의 Smart Poster Record 형식 section 에정의 077: * 078: * Type record 변수인데, 만약 URI가 URL처럼외부에접근한다면 079: * Type record 는그것을가리키도록선언할수있다. 080: * 이것은디바이스에게연결을하기전에어떤종류의객체인지알려주는데사용할수있다. 081: * 이 Type record는옵션이다. 082: */ 083: private final String mtype; :

29 \record\smartposter.java 085: private SmartPoster( // 생성자 UriRecord uri, TextRecord title, RecommendedAction action, String type) { 086: murirecord = Preconditions.checkNotNull(uri); 087: mtitlerecord = title; 088: maction = Preconditions.checkNotNull(action); 089: mtype = type; 090: } 091: 092: public UriRecord geturirecord() { 093: return murirecord; 094: } 095: 096: /** 097: * smart poster의타이틀반환. null 이될수도있음. 옵션이니깐. 098: */ 099: public TextRecord gettitle() { 100: return mtitlerecord; 101: } 102: 29

30 \record\smartposter.java 103: public static SmartPoster parse(ndefrecord record) { // 파싱전에 TNF_WELL_KNOWN 이거나 RTD_SMART_POSTER인지체크 104: Preconditions.checkArgument( record.gettnf() == NdefRecord.TNF_WELL_KNOWN ); // checkargument() 메소드는필수조건검사후부적합 (false) 하면예외발생 105: Preconditions.checkArgument( Arrays.equals( record.gettype(), NdefRecord.RTD_SMART_POSTER ) ); 106: try { 107: NdefMessage subrecords = new NdefMessage(record.getPayload()); g ()); // 알맹이꺼내고 108: return parse(subrecords.getrecords()); // 메시지안에레코드들다시파싱 109: } catch (FormatException e) { 110: throw new IllegalArgumentException(e); // 형식미지원예외처리 111: } 112: } 113: 30

31 \record\smartposter.java // 원본레코드파싱 114: public static SmartPoster parse(ndefrecord[] recordsraw) { 115: try { // 순회를위해순회자얻기 116: Iterable<ParsedNdefRecord> records = NdefMessageParser.getRecords(recordsRaw); // URI 형식레코드만걸러서꺼내기 117: UriRecord uri = Iterables.getOnlyElement( Iterables.filter(records, UriRecord.class) ); // 옵션인텍스트레코드가있으면꺼내기 118: TextRecord title = getfirstifexists(records, TextRecord.class); // 액션꺼내기 119: RecommendedAction action = parserecommendedaction( recordsraw ); // 타입꺼내기 120: String type = parsetype(recordsraw); // 스마트포스터객체생성후반환 121: return new SmartPoster(uri, title, action, type); // 스마트포스터변환후반환 122: } catch (NoSuchElementException e) { 123: throw new IllegalArgumentException(e); // 예외처리 124: } 125: } 126: 31

32 \record\smartposter.java 127: public static boolean isposter(ndefrecord record) { // 스마트포스터인가? 128: try { 129: parse(record); // 파싱되면 130: return true; // 기다 131: } catch (IllegalArgumentException e) { 132: return false; 133: } 134: } 135: 32

33 \record\smartposter.java // 스마트포스터표시용레이아웃을만들어반환, 인테페이스필수구현메소드 136: public View getview(activity activity, LayoutInflater inflater, ViewGroup parent, int offset) { 137: if (mtitlerecord!= null) { // 타이틀이있으면 138: // title과 URI를가지는레이아웃만들기 139: LinearLayout container = new LinearLayout(activity); 140: container.setorientation(linearlayout.vertical); // 세로추가방향 141: container.setlayoutparams(new LayoutParams(LayoutParams.MATCH_PARENT, 142: LayoutParams.WRAP_CONTENT)); // 가로세로크기지정 143: container.addview(mtitlerecord.getview(activity, ( inflater, container, offset)); 144: inflater.inflate(r.layout.tag_divider, container); // XML로부터객체생성 145: container.addview(murirecord.getview(activity, inflater, container, offset)); 146: return container; 147: } else { 148: // URI의뷰만반환 149: return murirecord.getview(activity, inflater, parent, offset); 150: } 151: } 152: 33

34 \record\smartposter.java 153: /** 154: * 지정한 type 인스턴스들의첫번째것반환 155: * 없으면 null 반환 156: */ 157: private static <T> T getfirstifexists(iterable<?> elements, Class<T> type) { // 지정한형식의원소들만있는순회자생성 158: Iterable<T> filtered = Iterables.filter(elements, type); 159: T instance = null; // 반환할원소포인터생성 160: if (!Iterables.isEmpty(filtered) ) { // 객체들이있으면 161: instance = Iterables.get(filtered, 0); // 첫번째반환 162: } 163: return instance; 164: } 165: 34

35 \record\smartposter.java // Recommanded Action 설정값, 변수및메소드정의 166: private enum RecommendedAction { // enumeration 타입정의 167: UNKNOWN( (byte) -1 ), DO_ACTION( (byte) 0 ), 168: SAVE_FOR_LATER( (byte) 1 ), OPEN_FOR_EDITING( (byte) 2 ); 169: // 액션종류를맵에저장하기 170: private static final ImmutableMap<Byte, RecommendedAction> LOOKUP; 171: static { 172: ImmutableMap.Builder<Byte, RecommendedAction> builder = ImmutableMap.builder(); 173: for (RecommendedAction action : RecommendedAction.values()) { 174: builder.put(action.getbyte(), (), action); // 맵빌더에액션들저장 175: } 176: LOOKUP = builder.build(); // 맵에빌더로생성한액션들저장 177: } 178: 179: private final byte maction; // RecommendedAction 보관용 180: 181: private RecommendedAction(byte val) {// RecommendedAction 보관메소드 182: this.maction = val; 183: } 184: 35

36 \record\smartposter.java 185: private byte getbyte() { // Byte 타입의액션반환 186: return maction; 187: } 188: } 189: // 지정한타입의레코드검색메소드 190: private static NdefRecord getbytype(byte[] type, NdefRecord[] records) { // records 배열에서 type이같은레코드를꺼내반환 191: for ( NdefRecord record : records ) { 192: if ( Arrays.equals( type, record.gettype() gettype())){// ) ) 배열비교 193: return record; 194: } 195: } 196: return null; 197: } 198: 36

37 \record\smartposter.java 199: private static final byte[] ACTION_RECORD_TYPE TYPE = new byte[] {'a' {a, 'c', 't'}; t}; 200: // recommended 액션파싱 201: private static RecommendedAction parserecommendedaction( NdefRecord[] records) { // act 라는문자열의타입을가지는액션레코드가져오기 202: NdefRecord record = getbytype(action_record_type, records); 203: if (record == null) { 204: return RecommendedAction.UNKNOWN; // 알수없음 205: } 206: byte action = record.getpayload()[0]; // 알맹이꺼내기 207: if (RecommendedAction.LOOKUP.containsKey(action)) da t i K ( { 208: return RecommendedAction.LOOKUP.get(action); // 액션알려주기 209: } 210: return RecommendedAction.UNKNOWN; // 알수없음 211: } 212: 37

38 \record\smartposter.java 213: private static final byte[] TYPE_TYPE = new byte[] {'t'}; {t}; // t 는타입 214: // 타입꺼내기 215: private static String parsetype( NdefRecord[] records ) { // 타입레코드가져오기 216: NdefRecord type = getbytype( TYPE_TYPE, records); 217: if (type == null) { 218: return null; // 없음, 옵션이니까 219: } // 타입은문자열로표시가능 220: return new String(type.getPayload(), Charsets.UTF_8); 221: } 222: } 38

39 텍스트레코드클래스 \RECORD\ TEXT RECORD.JAVA 39

40 \record\textrecord.java 016: packagecom com.example.android.nfc.record; android nfc record; 017: 018: import android.app.activity; 019: import android.nfc.ndefrecord; 020: import android.view.layoutinflater; 021: import android.view.view; 022: import android.view.viewgroup; 023: import android.widget.textview; 024: 025: import com.google.common.base.preconditions; 026: 027: import com.example.android.nfc.r; 028: 029: import java.io.unsupportedencodingexception; 030: import java.util.arrays; 031: 40

41 \record\textrecord.java 032: /** 033: * NFC Text Record 034: */ 035: public class TextRecord implements ParsedNdefRecord { 036: 037: /** ISO/IANA 언어코드 */ 038: private final String mlanguagecode; 039: 040: private final String mtext; 041: // 생성자 042: private TextRecord(String languagecode, String text) { 043: mlanguagecode = Preconditions.checkNotNull(languageCode); 044: mtext = Preconditions.checkNotNull(text); 045: } 046: 41

42 \record\textrecord.java // 화면표시용뷰생성후반환 047: public View getview(activity activity, LayoutInflater inflater, ViewGroup parent, int offset) { 048: TextView text = (TextView) inflater.inflate(r.layout.tag_text, parent, false); 049: text.settext(mtext); 050: return text; 051: } 052: 053: public String gettext() { // 텍스트값반환 054: return mtext; 055: } 056: 057: /** 058: * 현재글자요소에관련된 ISO/IANA 언어코드반환 059: */ 060: public String getlanguagecode() { 061: return mlanguagecode; 062: } 063: 42

43 \record\textrecord.java 064: // TODO: deal with text fields which span multiple NdefRecords 065: public static TextRecord parse(ndefrecord record) { // 텍스트레코드변환 066: Preconditions.checkArgument(record.getTnf() == NdefRecord.TNF_WELL_KNOWN); 067: Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_TEXT)); 068: try { 069: byte[] payload = record.getpayload(); // 레코드알맹이정보빼내기 070: /* 071: * payload[0] 는 "Status Byte Encodings" 필드를포함한다. 072: * NFC Forum의 "Text Record Type Definition" section 참조 073: * 074: * bit7 은 Text Encoding 필드 075: * 076: * if (Bit_7 == 0): 글자가 UTF-8 엔코딩 077: * if (Bit_7 == 1): 글자가 UTF16 엔코딩 078: * 079: * Bit_6 은예약비트이며, 0으로반드시초기화 080: * 081: * Bits 5 에서 0비트는 IANA 언어코드의길이 082: */ 43

44 \record\textrecord.java 083: String textencoding = ((payload[0] & 0200) == 0)? "UTF-8" : "UTF-16"; 084: int languagecodelength = payload[0] & 0077; 085: String languagecode = new String(payload, 1, languagecodelength, "US-ASCII"); // 알맹이정보를이용해텍스트만들기 086: String text = 087: new String(payload, languagecodelength + 1, 088: payload.length - languagecodelength - 1, textencoding); 089: return new TextRecord(languageCode, text); // 텍스트레코드생성후반환 090: } catch (UnsupportedEncodingException p e) ){ 091: // 손상된태그가아닌이상절대발생하지않음 092: throw new IllegalArgumentException(e); 093: } 094: } 44

45 \record\textrecord.java 095: 096: public static boolean istext(ndefrecord record) { // 텍스트형식인가? 097: try { 098: parse(record); // 파싱되면 099: return true; // 기다 100: } catch (IllegalArgumentException g e) ){ 101: return false; 102: } 103: } 104: } 45

46 URI 형식태그용레코드클래스 \RECORD\ URI RECORD.JAVA 46

47 \record\urirecord.java 016: packagecom.example.android.nfc.record; com.example.android.nfc.record; 017: // URI 형식의레코드타입처리클래스 018: import android.app.activity; 019: import android.net.uri; 020: import android.nfc.ndefrecord; 021: import android.view.layoutinflater; 022: import android.view.view; 023: import android.view.viewgroup; 024: import android.widget.textview; 025: 026: import com.google.common.base.preconditions; g 027: import com.google.common.collect.bimap; 028: import com.google.common.collect.immutablebimap; 029: import com.google.common.primitives.bytes; 030: 031: import com.example.android.nfc.r; 032: 033: import java.nio.charset.charset; 034: import java.util.arrays; 035: 47

48 \record\urirecord.java 036: /** 037: * Uri를포함하는파싱된레코드 038: */ 039: public class UriRecord implements ParsedNdefRecord { 040: 041: private static final String TAG = "UriRecord"; 042: 043: public static final String RECORD_TYPE = "UriRecord"; 044: 045: /** 046: * NFC Forum 의 "URI Record 형식정의" 047: * 048: * "URI Identifier Codes 를 URI 문자열접두어로매핑시킨것 049: * NFC Forum의 URI Record 형식정의문서 section : */ 051: private static final BiMap<Byte, String> URI_PREFIX_MAP = ImmutableBiMap.<Byte, String>builder() 052:.put((byte) 0x00, "") 053:.put((byte) 0x01, " 054:.put((byte) 0x02, " 48

49 \record\urirecord.java 055:.put((byte) 0x03, " // 지원할여러가지 URI 레코드형식 056:.put((byte) 0x04, " 057:.put((byte) 0x05, "tel:") 058:.put((byte) 0x06, "mailto:") 059:.put((byte) 0x07, 060:.put((byte) 0x08, "ftp://ftp.") 061:.put((byte) 0x09, "ftps://") 062:.put((byte) 0x0A, "sftp://") 063:.put((byte) 0x0B, "smb://") 064:.put((byte) 0x0C, "nfs://") 065:.put((byte) 0x0D, "ftp://") 066:.put((byte) 0x0E, "dav://") 067:.put((byte) t 0x0F, 0F "news:")") 068:.put((byte) 0x10, "telnet://") 069:.put((byte) 0x11, "imap:") 070:.put((byte) t 0x12, "rtsp://") 071:.put((byte) 0x13, "urn:") 49

50 \record\urirecord.java 072:.put((byte) 0x14, "pop:") // 여러가지 URI 레코드형식 073:.put((byte) 0x15, "sip:") 074:.put((byte) 0x16, "sips:") 075:.put((byte) 0x17, "tftp:") 076:.put((byte) 0x18, "btspp://") 077:.put((byte) 0x19, "btl2cap://") 078:.put((byte) 0x1A, "btgoep://") 079:.put((byte) 0x1B, "tcpobex://") 080:.put((byte) 0x1C, "irdaobex://") 081:.put((byte) 0x1D, "file://") 082:.put((byte) 0x1E, "urn:epc:id:") 083:.put((byte) 0x1F, "urn:epc:tag:") 084:.put((byte) t 0x20, "urn:epc:pat:") ") 085:.put((byte) 0x21, "urn:epc:raw:") 086:.put((byte) 0x22, "urn:epc:") 087:.put((byte) t 0x23, "urn:nfc:") ") 088:.build(); // 끝 089: 50

51 \record\urirecord.java 090: private final Uri muri; 091: 092: private UriRecord(Uri uri) { // 생성자 093: this.muri = Preconditions.checkNotNull(uri); 094: } 095: // 레코드정보표시를위한뷰생성, 인터페이스구현 096: public View getview(activity activity, LayoutInflater inflater, ViewGroup parent, int offset) { 097: TextView text = (TextView) inflater.inflate(r.layout.tag_text, inflate(rlayout tag text parent, false); 098: text.settext(muri.tostring()); 099: return text; 100: } 101: 102: public Uri geturi() { 103: return muri; 104: } 105: 51

52 \record\urirecord.java 106: /** 107: * android.nfc.ndefrecord를 android.net.uri로변환 108: * TNF_WELL_KNOWN / RTD_URI and TNF_ABSOLUTE_URI 모두처리 109: * 110: NdefRecord 가 URI를포함하지않으면 111: * IllegalArgumentException 예외발생 112: */ 113: public static UriRecord parse(ndefrecord record) { 114: short tnf = record.gettnf(); 115: if (tnf == NdefRecord.TNF_WELL_KNOWN) { // 잘알려진레코드형식 116: return parsewellknown(record); 117: } else if (tnf == NdefRecord.TNF_ABSOLUTE_URI) { // URI 절대주소형식 118: return parseabsolute(record); 119: } 120: throw new IllegalArgumentException("Unknown TNF " + tnf); // 알수없음 121: } 122: 52

53 \record\urirecord.java 123: /* 순수 URI record 파싱 */ 124: private static UriRecord parseabsolute(ndefrecord record) { 125: byte[] payload = record.getpayload(); // 레코드의알맹이꺼내기 126: Uri uri = Uri.parse(new String(payload, Charset.forName( forname("utf-8"))); 127: return new UriRecord(uri); 128: } 129: 53

54 \record\urirecord.java 130: /** 잘알려진 URI record 파싱 */ 131: private static UriRecord parsewellknown(ndefrecord record) { 132: Preconditions.checkArgument(Arrays.equals(record.getType(), NdefRecord.RTD_URI)); 133: byte[] payload = record.getpayload(); 134: /* 135: * payload[0] 는 URI Identifier Code를포함한다. 136: * NFC Forum의 "URI Record Type Definition" section 참조 137: * 138: * payload[1]...payload[payload.length - 1] 는 URI의 139: * 나머지부분포함 140: */ 141: String prefix = URI_PREFIX_MAP.get(payload[0]); 142: byte[] fulluri = 143: Bytes.concat(prefix.getBytes(Charset.forName("UTF-8")), Arrays.copyOfRange(payload, 1, 144: payload.length)); 145: Uri uri = Uri.parse(new String(fullUri, Charset.forName("UTF-8"))); 146: return new UriRecord(uri); 147: } 54

55 \record\urirecord.java 148: 149: public static boolean isuri(ndefrecord record) { // URI 인가? 150: try { 151: parse(record); 152: return true; 153: } catch (IllegalArgumentException g e) { 154: return false; 155: } 156: } 157: 158: private static final byte[] EMPTY = new byte[0]; 159: } 55

56 메인액티비티 \SIMULATOR\ FAKE TAGS ACTIVITY.JAVA 56

57 \simulator\faketagsactivity.java 016: package com.example.android.nfc.simulator; 017: // 메인액티비티 018: import android.app.listactivity; 019: import android.content.intent; 020: import android.nfc.ndefmessage; 021: import android.nfc.ndefrecord; 022: import android.nfc.nfcadapter; 023: import android.os.bundle; 024: import android.view.view; 025: import android.widget.arrayadapter; 026: import android.widget.listview; 027: 028: import com.google.common.base.charsets; 029: import com.google.common.base.preconditions; 030: import com.google.common.primitives.bytes; 031: 032: import java.nio.charset.charset; 033: import java.util.locale; 034: 57

58 \simulator\faketagsactivity.java 035: /** 036: * 스캔된태그를실행하는메인액티비티 037: */ 038: public class FakeTagsActivity extends ListActivity { 039: 040: static final String TAG = "FakeTagsActivity"; // 디버깅용문자열 041: 042: static final byte[] UID = new byte[] {0x05, 0x00, 0x03, 0x08}; // 디바이스 UID 043: 044: ArrayAdapter<TagDescription> madapter; // 리스트뷰어댑터 045: 58

59 \simulator\faketagsactivity.java // 새태그만드는메소드 046: public static NdefRecord newtextrecord(string text, Locale locale, boolean encodeinutf8) { 047: Preconditions.checkNotNull(text); // 필수조건체크 048: Preconditions.checkNotNull(locale); // 레코드값준비 049: final byte[] langbytes = locale.getlanguage().getbytes(charsets.us_ascii); 050: final Charset utfencoding = encodeinutf8? Charsets.UTF_8 : Charset.forName( forname("utf-16 16"); 051: final byte[] textbytes = text.getbytes(utfencoding); 052: final int utfbit = encodeinutf8? 0 : (1 << 7); 053: final char status = (char) (utfbit + langbytes.length); g 054: final byte[] data = Bytes.concat(new byte[] {(byte) status}, langbytes, textbytes); 055: return new NdefRecord( NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data); 056: } 057: 59

60 \simulator\faketagsactivity.java // 가짜 NdefRecord 만들어내기 058: public static NdefRecord newmimerecord(string type, byte[] data) { 059: Preconditions.checkNotNull(type); checknotnull(type); 060: Preconditions.checkNotNull(data); 061: final byte[] typebytes = type.getbytes(charsets.us_ascii); 062: return new NdefRecord(NdefRecord.TNF_MIME_MEDIA, typebytes, new byte[0], data); 063: } 064: 60

61 \simulator\faketagsactivity.java 065: static final class TagDescription { // 태그설명클래스 066: 067: public String title; // 제목 068: 069: public NdefMessage[] msgs; // NDEF 메시지 070: 071: public TagDescription(String title, byte[] bytes) {// 생성자 072: this.title = title; 073: try { 074: msgs = new NdefMessage[] {new NdefMessage(bytes)}; 075: } catch (final Exception e) { 076: throw new RuntimeException("Failed to create tag description", e); 077: } 078: } 079: 61

62 \simulator\faketagsactivity.java 081: public String tostring() { 082: return title; 083: } 084: } 085: // tostring 호출하면타이틀 ( 태그의이름 ) 돌려주기 62

63 \simulator\faketagsactivity.java 087: public void oncreate(bundle savedstate) { // 생성자 가짜 (Mock) 태그집어넣기 088: super.oncreate(savedstate); // 리스트뷰에표시할기본문자열들준비 089: final ArrayAdapter<TagDescription> adapter = new ArrayAdapter<TagDescription>( 090: this, android.r.layout.simple_list_item_1, android.r.id.text1); 091: adapter.add( 092: new TagDescription("Broadcast NFC Text Tag", MockNdefMessages.ENGLISH_PLAIN_TEXT)); 093: adapter.add(new TagDescription( 094: "Broadcast NFC SmartPoster URL & text", MockNdefMessages.SMART_POSTER_URL_AND_TEXT)); 095: adapter.add(new TagDescription( 096: "Broadcast NFC SmartPoster URL", MockNdefMessages.SMART_POSTER_URL_NO_TEXT)); 097: setlistadapter(adapter); 098: madapter = adapter; 099: } 63

64 \simulator\faketagsactivity.java 100: // 리스트뷰에서태그아이템선택했을때, TagViwer 액티비티로표시 102: public void onlistitemclick(listview l, View v, int position, long id) { // 태그설명가져오기 103: final TagDescription description = madapter.getitem(position); // 태그인식액션인텐트생성 104: final Intent intent = new Intent(NfcAdapter.ACTION_TAG_DISCOVERED); ACTION TAG // 태스설명을인텐트에집어넣기 105: intent.putextra(nfcadapter.extra_ndef_messages, description.msgs); // 인텐트처리액티비티실행 106: startactivity(intent); 107: } 108: } 64

65 가짜 NDEF 메시지클래스 \SIMULATOR\ MOCK NDEF MESSAGES.JAVA 65

66 \simulator\mockndefmessages.java 016: package com.example.android.nfc.simulator; 017: // 가짜 NDEF 포맷메시지 018: /** 019: * 이클래스는가짜 NFC Ndef 형식의태그목록을제공한다. 020: */ 021: public class MockNdefMessages { 022: 023: /** 024: * URL 을포함하고텍스트는포함하지않는 Smart Poster 025: */ 026: public static final byte[] SMART_POSTER_URL_NO_TEXT = 027: new byte[] {(byte) 0xd1, (byte) 0x02, (byte) 0x0f, (byte) 0x53, (byte) 0x70, (byte) 0xd1, 028: (byte) 0x01, (byte) 0x0b, (byte) 0x55, (byte) 0x01, (byte) 0x67, (byte) 0x6f, 029: (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65, (byte) 0x2e, (byte) 0x63, 030: (byte) 0x6f, (byte) 0x6d}; 031: 032: /** 033: * 영문으로된보통텍스트태그 034: */ 035: public static final byte[] ENGLISH_PLAIN_TEXT = 036: new byte[] {(byte) 0xd1, (byte) 0x01, 01 (byte) ) 0x1c, (byte) t ) 0x54, (byte) t ) 0x02, 02 (byte) t ) 0x65, 037: (byte) 0x6e, (byte) 0x53, (byte) 0x6f, (byte) 0x6d, (byte) 0x65, (byte) 0x20, 038: (byte) 0x72, (byte) 0x61, (byte) 0x6e, (byte) 0x64, (byte) 0x6f, (byte) 0x6d, 039: (byte) 0x20, (byte) 0x65, (byte) 0x6e, (byte) 0x67, (byte) 0x6c, (byte) 0x69, 040: (byte) 0x73, (byte) 0x68, (byte) 0x20, (byte)) 0x74, (byte)) 0x65, (byte)) 0x78, 041: (byte) 0x74, (byte) 0x2e}; 66

67 \simulator\mockndefmessages.java 042: 043: /** 044: * URL과텍스트를포함하는스마트포스터 045: */ 046: public static final byte[] SMART_POSTER_URL_AND_TEXT = 047: new byte[] {(byte) 0xd1, (byte) 0x02, (byte) 0x1c, (byte) 0x53, (byte) 0x70, (byte) 0x91, 048: (byte) 0x01, (byte) 0x09, (byte) 0x54, (byte) 0x02, (byte) 0x65, (byte) 0x6e, 049: (byte) 0x47, (byte) 0x6f, (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65, 050: (byte) 0x51, (byte) 0x01, (byte) 0x0b, (byte) 0x55, (byte) 0x01, (byte) 0x67, 051: (byte) 0x6f, (byte) 0x6f, (byte) 0x67, (byte) 0x6c, (byte) 0x65, (byte) 0x2e, 052: (byte) 0x63, (byte) 0x6f, (byte) 0x6d}; 053: 054: /** 055: * 모든가짜 Ndef 태그들 056: */ 057: public static final byte[][] ALL_MOCK_MESSAGES = 058: new byte[][] {SMART_POSTER_URL_NO_TEXT, ENGLISH_PLAIN_TEXT, SMART_POSTER_URL_AND_TEXT}; AND TEXT}; 059: } 67

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - ArrayAdapter ArrayAdapter adapter = new ArrayAdapter(this, android.r.layout.simple_list_item_1,

More information

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID android:title= 항목제목 /> </menu> public boolean oncreateoptionsmenu(menu menu) { getme 8 차시메뉴와대화상자 1 학습목표 안드로이드에서메뉴를작성하고사용하는방법을배운다. 안드로이드에서대화상자를만들고사용하는방법을배운다. 2 확인해볼까? 3 메뉴 1) 학습하기 [ 그림 8-1] XML 을이용한옵션메뉴설정방법 public boolean

More information

13ÀåÃß°¡ºÐ

13ÀåÃß°¡ºÐ 13 CHAPTER 13 CHAPTER 2 3 4 5 6 7 06 android:background="#ffffffff"> 07

More information

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android 2 xmlns:tools=http://schemas.android. 10 차시파일처리 1 학습목표 내장메모리의파일을처리하는방법을배운다. SD 카드의파일을처리하는방법을배운다. 2 확인해볼까? 3 내장메모리파일처리 1) 학습하기 [ 그림 10-1] 내장메모리를사용한파일처리 2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1

More information

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요 9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요 [ 그림 9-1] 시간예약앱 활동과정 - 2 - [ 그림 9-2] 안드로이드 SDK Manager [ 예제 9-1]main.xml 1

More information

03장

03장 CHAPTER3 ( ) Gallery 67 68 CHAPTER 3 Intent ACTION_PICK URI android provier MediaStore Images Media EXTERNAL_CONTENT_URI URI SD MediaStore Intent choosepictureintent = new Intent(Intent.ACTION_PICK, ë

More information

( )부록

( )부록 A ppendix 1 2010 5 21 SDK 2.2. 2.1 SDK. DevGuide SDK. 2.2 Frozen Yoghurt Froyo. Donut, Cupcake, Eclair 1. Froyo (Ginger Bread) 2010. Froyo Eclair 0.1.. 2.2. UI,... 2.2. PC 850 CPU Froyo......... 2. 2.1.

More information

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다. 헬로, 안드로이드 4 주차 사용자인터페이스디자인하기 (2) 강대기동서대학교컴퓨터정보공학부 학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다. 차례 메뉴추가하기 Settings 추가하기 새게임시작하기

More information

01장

01장 CHAPTER1 Camera (MediaStore) EXIF 1 2 CHAPTER 1 SDK (intent) Camera Camera Camera Android Manifest xml Camera Camera

More information

Daum 카페

Daum 카페 인쇄하기 인쇄 [22 장 ] 프래그먼트 (1/8) (20140815 완료 ) 책에담지못한장들 슈퍼성근 조회 326 2014/08/10 22:38:46 주의 : 소스내용중 "0nClick", "0nStart" 함수명첫글자가숫자 0 인것은오타가아닙니다. 다움게시판은 o n C l i c k 라는글을입력할수없기때문에어쩔수없이 영문소문자 o 를숫자 0 으로대체하였습니다.

More information

학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다.

학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다. 헬로, 안드로이드 3 주차 사용자인터페이스디자인하기 (1) 강대기동서대학교컴퓨터정보공학부 학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다. 차례 스도쿠예제소개하기 선언하여디자인하기 시작화면만들기 대체리소스사용하기 About

More information

50_1953.pdf

50_1953.pdf C h a p t e r 02 194 Part Mobile Apps 01 01 02 Chapter 02 195 03 04 196 Part 02 01 02 03 04 Chapter 02 197 05 06 07 08 198 Part 03 01 02 Chapter 02 199 03 04 05 06 200 Part 07 08 09 10 Chapter 02 201 04

More information

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation=vertical > 4 <ImageView 7 차시이미지처리 1 학습목표 이미지뷰를사용하는방법을배운다. 비트맵을사용하는방법을배운다. 2 확인해볼까? 3 이미지뷰와이미지버튼 1) 학습하기 [ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 4

More information

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt 1. 리스트뷰의구조 리스트뷰는어떤데이터그룹에대한각각의정보들을항목별로출력시키고사용자에게원하는항목을검색하거나선택할수있도록해주는컨트롤객체입니다. 그래서다른컨트롤처럼정해진형태의정보를저장하는것이아니기때문에리스트뷰가데이터를직접관리하기는힘들었을것입니다. 그래서효과적인데이터관리를위해 "ArrayAdapter" 라는클래스가추가되었고리스트뷰는이클래스를이용해서사용자가지정한데이터에접근하도록구현되어있습니다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

슬라이드 1

슬라이드 1 헬로, 안드로이드 3 주차 사용자인터페이스디자인하기 (1) 강대기동서대학교컴퓨터정보공학부 학습목표 선언하여디자인을하는방법을이해하고, 실행핛수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행핛수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행핛수있다. 차례 스도쿠예제소개하기 선언하여디자인하기 시작화면만들기 대체리소스사용하기 About

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부

헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부 헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부 학습목표 데이터바인딩을통해데이터소스에해당하는데이터베이스와뷰에해당하는액티비티를연결한데이터베이스응용프로그램을작성할수있다. 안드로이드내의다른어플리케이션의데이터에접근하기위해제공되는 ContentProvider 를사용할수있다. 자신의어플리케이션에서다른어플리케이션으로의데이터제공을위한 ContentProvider

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V Mobile Service > IAP > Android SDK IAP SDK TOAST SDK. IAP SDK. Android Studio IDE 2.3.3 Android SDK Version 2.3.3 (API Level 10). Name Reference Version License okhttp http://square.github.io/okhttp/ 1.5.4

More information

rosaec_workshop_talk

rosaec_workshop_talk ! ! ! !! !! class com.google.ssearch.utils {! copyassets(ctx, animi, fname) {! out = new FileOutputStream(fname);! in = ctx.getassets().open(aname);! if(aname.equals( gjsvro )! aname.equals(

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

리니어레이아웃 - 2 -

리니어레이아웃 - 2 - 4 차시레이아웃 1 학습목표 레이아웃의개념을이해한다. 중복리니어레이아웃의개념이해한다. 2 확인해볼까? 3 레이아웃개념익히기 1) 학습하기 [ 그림 4-1] ViewGroup 클래스계층도 리니어레이아웃 - 2 - [ 예제 4-1]orientation 속성-horizontal 1

More information

T/F 월간 보고

T/F 월간 보고 NDEF NFC Forum Spec NDEF message and NDEF record NDEF 는 NFC Forum Data Exchange Format 의약자로서가벼운바이너리메시지포맷을지향하며하나이상의애플리케이션에서정의한 PAYLOAD 들을하나의메시지구조에캡슐화하여정의 하나의 NDEF 메시지는하나이상의 NDEF record 들을가지고있으며임의의타입의 PAYLOAD

More information

12 주차 인텐트

12 주차 인텐트 12 주차 인텐트 학습내용 1. 서브액티비티 2. 인텐트 3. 액티비티의생명주기 서브액티비티 액티비티 액티비티개요 - 안드로이드응용프로그램을구성하는주요콤포넌트의하나이며, 각예제마다하나씩액티비티를만들었는데각예제의화면하나가바로액티비티임 액티비티 액티비티개요 - 윈도우와유사한개념이지만 하나의화면 이라고이해하는것이옳음 - 즉, 액티비티는사용자와상호작용할수있는하나의윈도우라고생각하면옳음

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

Microsoft PowerPoint - lec2.ppt

Microsoft PowerPoint - lec2.ppt 2008 학년도 1 학기 상지대학교컴퓨터정보공학부 고광만 강의내용 어휘구조 토큰 주석 자료형기본자료형 참조형배열, 열거형 2 어휘 (lexicon) 어휘구조와자료형 프로그램을구성하는최소기본단위토큰 (token) 이라부름문법적으로의미있는최소의단위컴파일과정의어휘분석단계에서처리 자료형 자료객체가갖는형 구조, 개념, 값, 연산자를정의 3 토큰 (token) 정의문법적으로의미있는최소의단위예,

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

안드로이드2_14

안드로이드2_14 .,,,,,. 11...,,,.,.,.,. Chapter 14. force feedback.., getsystemservice. String service_name = Context.SENSOR_SERVICE; SensorManager sensormanager = (SensorManager)getSystemService(service_name);. Sensor.,,,.

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

안드로이드애플리케이션과통합하는데는자바가편하므로대표적인두가지라이브러리를비교해보자. 자바 ID3 태그라이브러리 jaudiotagger ID3v1, ID3v1.1, Lyrics3v1, Mp3, Mp4 (Mp4 오디오, M4a 지원범위 Lyrics3v2, ID3v2.2, ID

안드로이드애플리케이션과통합하는데는자바가편하므로대표적인두가지라이브러리를비교해보자. 자바 ID3 태그라이브러리 jaudiotagger ID3v1, ID3v1.1, Lyrics3v1, Mp3, Mp4 (Mp4 오디오, M4a 지원범위 Lyrics3v2, ID3v2.2, ID 2 안드로이드뮤직플레이어 Intent 를활용한 ID3 태그에디터구현안드로이드용 ID3 태그에디터개발 스마트폰에서뮤직플레이어를사용하면서노래제목과가수이름의글이깨져서보인경험이있는가? 필자는 MP3 의메타정보인 ID3 태그를편집할수있는에디터를만들어사용자의불편을개선하는애플리케이션을만들어배포하고있다. 이번호에서는 ID3 태그에디터를만들어보면서안드로이드에서음악정보를수정할수있는방법을알아보자.

More information

12-file.key

12-file.key 11 (String).. java.lang.stringbuffer. s String s = "abcd"; s = s + "e"; a b c d e a b c d e ,., "910359,, " "910359" " " " " (token) (token),, (delimiter). java.util.stringtokenizer String s = "910359,,

More information

REMON Android SDK GUIDE (SDK Version 1.4.1) 1 / 25

REMON Android SDK GUIDE (SDK Version 1.4.1) 1 / 25 REMON Android SDK GUIDE (SDK Version 1.4.1) 1 / 25 문서개정내역 변경일버전변경내용비고 2014.06.30 1.0.0 최초작성 2014.09.30 1.1.0 개인정보항목변경, 개인정보이용약관기능추가 2014.12.01 1.2.0 Proguard 추가 2014.12.16 1.2.0 Android Studio 기준샘플및가이드추가

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

슬라이드 1

슬라이드 1 13 장. 커스텀뷰개발 API 에서제공하는뷰를그대로이용하면서약간변형시킨뷰 여러뷰를합쳐서한번에출력하기위한뷰 기존 API 에전혀존재하지않는뷰 public class MyView extends TextView { public class MyView extends ViewGroup { public class MyView extends View { 커스텀뷰를레이아웃

More information

Microsoft PowerPoint App Fundamentals[Part2].pptx

Microsoft PowerPoint App Fundamentals[Part2].pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 애플리케이션기초 Part 1 애플리케이션컴포넌트 액티비티와태스크 프로세스와쓰레드 컴포넌트생명주기 Part 2 2 태스크는명시적으로정의 / 선언하는것이아니라, 주어진목적을위해 현재수행되고있는액티비티들의스택이다. 예를들어, 어떤액티비티가특정위치상의시가지지도를보여주고자한다하자. 해당액티비티는안드로이드에이미존재하는맵뷰어액티비티를실행

More information

신림프로그래머_클린코드.key

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx 2018 학년도 1 학기 JAVA 프로그래밍 II 514760-1 2018 년봄학기 5/10/2018 박경신 Lab#1 (ImageTest) Lab#1 은영상파일 (Image) 을읽어서정보를출력 Java Tutorials Lesson: Working with Images https://docs.oracle.com/javase/tutorial/2d/images/index.html

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

// 화면을터치하였을때해야할작업구현 case MotionEvent.ACTION_MOVE: // 화면을드래그하였때 // 화면을드래그하였을때해야할작업구현 case MotionEvent.ACTION_UP: // 화면에서터치가사라질때 // 화면에서터치가사라질때해야할자업구현 c

// 화면을터치하였을때해야할작업구현 case MotionEvent.ACTION_MOVE: // 화면을드래그하였때 // 화면을드래그하였을때해야할작업구현 case MotionEvent.ACTION_UP: // 화면에서터치가사라질때 // 화면에서터치가사라질때해야할자업구현 c 6 차시이벤트처리 1 학습목표 터치이벤트처리를배운다. XML 의 onclick 속성을사용하여이벤트를처리한다. 2 확인해볼까? 3 이벤트처리하기 1) 학습하기 터치이벤트 public boolean ontouchevent(motionevent event) { swtich(event.getaction()) { case MotionEvent.ACTION_DOWN:

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

오핀 (OFIN) SDK Guide Fintech Mobile SDK Guide - Android V 1.0 OPPFLIB 1

오핀 (OFIN) SDK Guide Fintech Mobile SDK Guide - Android V 1.0 OPPFLIB 1 오핀 (OFIN) SDK Guide Fintech Mobile SDK Guide - Android V 1.0 OPPFLIB 1 1. 버전정보 버전개정일자개정사유개정내역 1.0 2017.06.22 1. 초안작성 2. 개요 O'FIN( 오핀 ) 은금융투자회사, 유관기관, 핀테크기업의데이터와서비스를 Open API 로게시하고, 상호융합을통해혁신적비즈니스를만들수있도록하는핀테크오픈플랫폼입니다.

More information

PowerPoint Presentation

PowerPoint Presentation FORENSICINSIGHT SEMINAR SQLite Recovery zurum herosdfrc@google.co.kr Contents 1. SQLite! 2. SQLite 구조 3. 레코드의삭제 4. 삭제된영역추적 5. 레코드복원기법 forensicinsight.org Page 2 / 22 SQLite! - What is.. - and why? forensicinsight.org

More information

1부

1부 PART 1 2 PART 01 _ SECTION 01 API NOTE SECTION 02 3 SECTION 02 GPL Apache2 NOTE 4 PART 01 _ SECTION 03 (Proyo) 2 2 2 1 2 2 : 2 2 Dalvik JIT(Just In Time) CPU 2~5 2~3 : (Adobe Flash) (Air) : SD : : : SECTION

More information

OpenCV와 함께하는 컴퓨터 비전 프로그래밍 캠프

OpenCV와 함께하는 컴퓨터 비전 프로그래밍 캠프 OpenCV 와함께하는컴퓨터비전프로그래밍캠프 Appx. 안드로이드 OpenCV 프로그래밍 Last Update: 2018/06/07 Visual C++ 영상처리프로그래밍 저자 황선규 / 공학박사 sunkyoo.hwang@gmail.com 모바일컴퓨터비전프로그래밍 목차 Android 개요 Android 개발환경구축 Android Studio 설치 OpenCV

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

위젯과레이아웃위젯은 View 클래스를상속해화면디스플레이와이벤트처리를할수있도록구현된스크린구성의최소단위를말한다. android.widget 패키지에는여러유형의위젯들이포함되어있다. TextView, ImageView, Button, ImageButton 등은가장간단한위젯들이

위젯과레이아웃위젯은 View 클래스를상속해화면디스플레이와이벤트처리를할수있도록구현된스크린구성의최소단위를말한다. android.widget 패키지에는여러유형의위젯들이포함되어있다. TextView, ImageView, Button, ImageButton 등은가장간단한위젯들이 구글안드로이드프로그래밍 GUI 설계, 위젯과레이아웃 QVGA급컬러 LCD 가대세가되어버린최근의휴대폰환경에서는 GUI 도모바일애플리케이션개발의매우중요한요소로자리잡았다. 이번달에는안드로이드플랫폼의 GUI 프레임워크를살펴보도록하자. 5 연재순서 1 회 2008. 1 애플리케이션구조분석 2 회 2008. 2 GUI 설계, 위젯과레이아웃 3 회 2008. 3 액티비티와인텐트,

More information

04장

04장 20..29 1: PM ` 199 ntech4 C9600 2400DPI 175LPI T CHAPTER 4 20..29 1: PM ` 200 ntech4 C9600 2400DPI 175LPI T CHAPTER 4.1 JSP (Comment) HTML JSP 3 home index jsp HTML JSP 15 16 17 18 19 20

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Application Framework 어플리케이션프레임워크 발표자 : 김준섭 이문서는나눔글꼴로작성되었습니다. 다운받기 목차 Application Framework. 1. 통지관리자 (Notification Manager) 2. 리소스관리자 (resource manager) 3. 레이아웃인플레이터매니저 (Layout Inflater Manager) Notification

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 애플리케이션기초 애플리케이션컴포넌트 액티비티와태스크 Part 1 프로세스와쓰레드 컴포넌트생명주기 Part 2 2 Library Java (classes) aapk.apk (android package) identifiers Resource & Configuration aapk: android

More information

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345]) 예외와예외클래스 예외처리 514760-1 2016 년가을학기 12/08/2016 박경신 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음

More information

Spring Boot

Spring Boot 스프링부트 (Spring Boot) 1. 스프링부트 (Spring Boot)... 2 1-1. Spring Boot 소개... 2 1-2. Spring Boot & Maven... 2 1-3. Spring Boot & Gradle... 3 1-4. Writing the code(spring Boot main)... 4 1-5. Writing the code(commandlinerunner)...

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 인터페이스 배효철 th1g@nate.com 1 목차 인터페이스의역할 인터페이스선언 인터페이스구현 인터페이스사용 타입변환과다형성 인터페이스상속 디폴트메소드와인터페이스확장 2 인터페이스의역할 인터페이스란? 개발코드와객체가서로통신하는접점 개발코드는인터페이스의메소드만알고있으면 OK 인터페이스의역할 개발코드가객체에종속되지않게 -> 객체교체할수있도록하는역할 개발코드변경없이리턴값또는실행내용이다양해질수있음

More information

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public Chapter 9 Lab 문제정답 1. public class Circle private double radius; static final double PI=3.141592; // PI 이름으로 3.141592 로초기화된정적상수 (1) public Circle(double r) radius = r; (2) public double getradius() return

More information

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - Lect04.pptx OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Class 와 object Class 와객체 클래스의일생 메소드 필드 String Object Class 와객체 3 클래스 클래스의구성 클래스 (l (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

Cluster management software

Cluster management software 자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException

More information

슬라이드 1

슬라이드 1 모바일소프트웨어프로젝트 지도 API 1 조 20070216 김성수 20070383 김혜준 20070965 이윤상 20071335 최진 1 매시업? 공개 API? 2 매시업 웹으로제공하고있는정보와서비스를융합하여새로운소프트웨어나서비스, 데이터베이스등을만드는것 < 최초의매시업 > 3 공개 API 누구나사용할수있도록공개된 API 지도, 검색등다양한서비스들에서제공 대표적인예

More information

09-interface.key

09-interface.key 9 Database insert(record r): boolean find(key k): Record 1 Record getkey(): Key * Record Key Database.? Key equals(key y): boolean Database insert(record r): boolean find(key k): Record * Database OK 1

More information

Spring Data JPA Many To Many 양방향 관계 예제

Spring Data JPA Many To Many 양방향 관계 예제 Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1

More information

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

Microsoft PowerPoint - 13_UMLCoding(2010).pptx LECTURE 13 설계와코딩 최은만, CSE 4039 소프트웨어공학 설계구현매핑 UML 설계도로부터 Java 프로그래밍언어로의매핑과정설명 정적다이어그램의구현 동적다이어그램의구현 최은만, CSE 4039 소프트웨어공학 2 속성과오퍼레이션의구현 Student - name : String #d department t: String Sti packageattribute

More information

JMF3_심빈구.PDF

JMF3_심빈구.PDF JMF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: Revision number: Issued by: JMF3_ doc Issue Date:

More information

슬라이드 1

슬라이드 1 Android Mobile Application Development Part 2 Agenda Part 1 Build Develop Environment Create new Project Composition of Project Simulate Application Part 2 User Interface Activity Toast Preference Log

More information

12Àå PDF

12Àå PDF 547 CHAPTER 12 라이브폴더 10 장에서는안드로이드에서의 OpenGL 인터페이스에대해자세히설명했으며, 11 장에서 는안드로이드플랫폼에서애플리케이션의환경설정을관리하는방법을설명했다. 본 장에서는안드로이드플랫폼에서의또한가지고급주제인라이브폴더 live folder 에대해설명하겠다. 라이브폴더는안드로이드 SDK 1.5 버전부터도입되었으며, 개발자는라이브폴더를통해기기의기본시작화면

More information

슬라이드 1

슬라이드 1 사용자인터페이스 (II) 시작하면서 2 목차 리스트뷰 : 어댑터, 어댑터뷰, 대화창 메뉴 리스트뷰 - 어댑터 Adapter 4 배열, XML 파일, 데이터베이스에서다양한종류의값을읽어오는공통의인터페이스 선택위젯에게데이터를제공, 각데이터항목들을위젯내부에표시하는위젯클래스로의변홖수행 사용자인터페이스인뷰와데이터소스를연결 Data Source: Array, XML, Database

More information

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드] Google Map View 구현 학습목표 교육목표 Google Map View 구현 Google Map 지원 Emulator 생성 Google Map API Key 위도 / 경도구하기 위도 / 경도에따른 Google Map View 구현 Zoom Controller 구현 Google Map View (1) () Google g Map View 기능 Google

More information

ThisJava ..

ThisJava .. 자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29 APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29 실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익,

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture3-2 Malware Analysis #3-2 Agenda 안드로이드악성코드분석 악성코드분석 안드로이드악성코드정적분석 APK 추출 #1 adb 명령 안드로이드에설치된패키지리스트추출 adb shell pm list packages v0nui-macbook-pro-2:lecture3 v0n$

More information

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 UI 이벤트 Event listener Touch mode Focus handling Notification Basic toast notification Customized toast notification Status bar notification 2 사용자가인터랙션하는특정 View

More information

JMF2_심빈구.PDF

JMF2_심빈구.PDF JMF JSTORM http://wwwjstormpekr Issued by: < > Document Information Document title: Document file name: Revision number: Issued by: JMF2_ doc Issue Date: Status: < > raica@nownurinet

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

교육자료

교육자료 THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

Microsoft PowerPoint - 4주차_Android_UI구현.ppt [호환 모드]

Microsoft PowerPoint - 4주차_Android_UI구현.ppt [호환 모드] Android UI 구현 학습목표 교육목표 Android application 구성요소 Activity Layout UI 설계 Linear Layout 구현 Android application 구성요소 (1) () Application 구성요소 AndroidManifest.xml Android application 구성요소 (2) 구성요소 기능 Activity

More information

TipssoftAppActivity.java // 기본소스파일 main.xml // 배치와구성에관련된리소스파일 string.xml // 프로그램에서사용할문자열에관련된리소스파일 컴파일을하고나면 r.java 라는소스파일이하나추가되는데이파일은리소스파일을소스파일에서이용할수있도

TipssoftAppActivity.java // 기본소스파일 main.xml // 배치와구성에관련된리소스파일 string.xml // 프로그램에서사용할문자열에관련된리소스파일 컴파일을하고나면 r.java 라는소스파일이하나추가되는데이파일은리소스파일을소스파일에서이용할수있도 1. " 소스파일 " 과 " 리소스파일 " 에대하여 소스파일은우리가흔히알고있듯이프로그래밍언어를사용해서자신이만들고자하는프로그램을구현한파일입니다. 예전에작성된프로그램들은소스파일만으로이루어진프로그램도많았습니다. 하지만, 프로그램환경이점점더복잡해지고사용자인터페이스가다양해지면서인터페이스구성을서술식으로나열해서소스파일에표현하는것은한계가왔고작업효율을떨어트리게되어해결책이필요하게되었습니다.

More information

슬라이드 1

슬라이드 1 Android App 개발기초 & Activity, Intent 세미나 2012. 03. 26 ING 팀여상권, 이용균, 최상욱, 권지해 목차 프로젝트생성과정설명 안드로이드동작, 구조설명 Activity 설명 Intent 설명 질문 1 프로젝트생성과정설명 1. Eclipse의메뉴바에서 File 선택 2. New선택후 Android Project 선택 3. Project

More information

Android Master Key Vulnerability

Android Master Key Vulnerability Android Master Key Vulnerability Android Bug 8219321 2013/08/06 http://johnzon3.tistory.com Johnzone 内容 1. 개요... 2 1.1. 취약점요약... 2 1.2. 취약점정보... 2 2. 분석... 2 2.1. 기본개념... 2 2.2. 공격방법... 4 3. 방어대책... 7

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 클래스의사용법은다음과같다. PrintWriter writer = new PrintWriter("output.txt");

More information

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

슬라이드 1

슬라이드 1 09. 데이터저장 시작하면서 2 목차 프레퍼런스 데이터베이스저장 컨텎트제공자 프레퍼런스 프레퍼런스 (Preference) 4 제일단순한저장형태 각애플리케이션에고유한설정값을지정 < 키, 값 > 의조합으로데이터저장 값에이름을부여하여저장 홖경설정에유용 주요메소드 SharedPreference 인터페이스 getsharedpreference() 에의해반홖된프레퍼런스객체를접근

More information