[실습] SpecialMember 클래스 작성

1. okgosu.member패키지에 BasicMember를 extends 하여 정의

2. 다음의 멤버변수를 추가
private int _point; // 포인트

3. 이름, 아이디, 포인트를 입력받는 생성자 함수를 오버로딩

4. printMember 함수를 오버라이딩해서 이름, 아이디, 포인트를 출력

[실습] MemberManager 활용
1. main 함수에 다음 코드를 추가하고
BasicMember sm1 = new SpecialMember("아무개1", 222, 100);
BasicMember sm2 = new SpecialMember("아무개2", 333, 200);
mm.addMember(sm1);
mm.addMember(sm2);

2. printMemberList의 함수 수정
다음 로직을 추가
if(obj instanceof SpecialMember) {
   System.out.println("#### SpecialMember ####");
   SpecialMember em = (SpecialMember)obj;
   em.printMember();
}
[실습] 회사 정보를 다루기 위한 클래스 작성
1. 패키지명: com.myjava
2. 클래스명: MyCompany
3. 멤버변수
c_id(회사 아이디, int, public으로) c_name(회사명, String, public으로)
4. 메소드
printCompanyInfo(void, public으로) : c_id와 c_name값 출력
5. 생성자 함수 2개 추가
- 디폴트 생성자 함수
- 회사아이디와 회사명을 입력받는 생성자 함수

[실습] 회사정보 인스턴스를 생성하는 테스트 클래스 작성
1. 패키지명: 디폴트
2. 클래스명: MyCompanyManager
3. main함수에서 다음의 정보로 회사정보 3건 생성 (main함수 안에)
1) 변수명: comp1, 아이디: 1, 이름: 안드로이드1
2) 변수명: comp2, 아이디: 2, 이름: 안드로이드2
3) 변수명: comp3, 아이디: 3, 이름: 안드로이드3

4. 생성한 인스턴스 3개를 ArrayList에 추가한다. (main함수 안에)
ArrayList al = new ArrayList();
al.add(comp1);
al.add(comp2);
al.add(comp3);

5. ArrayList에 추가된 회사정보들을 다음과 같이 출력해본다. (main함수 안에)
for(int i=0; i<al.size(); i++) {
   MyCompany mc = (MyCompany)al.get(i);
   mc.printCompanyInfo();
}

<클래스 관계>

Member
--> GeneralMember, VIPMember, GuestMember


=======================3일차==========================
1. 레이아웃 작성: my_second_app.xml
1) LinearLayout (orientation은 vertical)
2) EditText (id = ed1)
3) Button (id = btn1)
4) EditText, Button 모두 layout_width, layout_height는 모두 wrap_content
2. 액티비티 작성: MySecondApp (super class는 Activity)
1) onCreate 오버라이딩
setContentView(R.layout.my_second_app);
Button btn1 = (Button)findViewById(R.id.btn1);

2) 버튼을 클릭하면 (btn1.setOnClickListenr의 onClick함수 안에)
 EditText의값을Toast로띄우도록한다.

// onClick 함수 안에 들어갈 내용
EditText ed1 = (EditText)findViewById(R.id.ed1);
String msg = ed1.getText().toString();
Toast.makeText(MySecontApp.this, msg, 1000).show();



[GPS컨트롤]
1. 레이아웃 : my_gps.xml
- LinearLayout에 CheckBox 추가 (id는 cb_gps)
2. 액티비티: MyGPS.java onCreate에서 GPS의 설정을 읽어와 체크박스에 on/off로 표시함
1) onCreate 오버라이딩
setContentView(R.layout.my_gps);
CheckBox cb_gps = (CheckBox)findViewById(R.id.cb_gps);
2) GPS 설정상태 읽어오기
String gs = android.provider.Settings.Secure.getString(getContentResolver(),
android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if (gs.indexOf("gps", 0) <  0) {
    cb_gps.setChecked(false);
    cb_gps.setText("GPS꺼짐");
} else {
    cb_gps.setChecked(true);
    cb_gps.setText("GPS켜짐");
}

3. cb_gps 체크 상태가 변경 되면 GPS 설정화면으로 이동 
cb_gps.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              new AlertDialog.Builder(MyGPS.this)
             .setTitle("GPS 설정")
             .setMessage("GPS 설정변경")
             .setPositiveButton("GPS 설정변경", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int which) {
                      Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                      startActivity(intent);
                   }
              }).show(); 
      }
});


[폰 배경화면 설정하기]
1. 퍼미션 추가
<uses-permission android:name="android.permission.SET_WALLPAPER"/>

2. imgBtn클릭 리스너 설정

3. imgBtn의 onClcik에 다음 내용 추가
WallpaperManager wallpaperManager = WallpaperManager.getInstance(MyWebView.this);
iv.setDrawingCacheEnabled(true);
try {
      wallpaperManager.setBitmap(iv.getDrawingCache());
} catch (IOException e) {
      e.printStackTrace();
}

[EditText 실습]
1. my_edit_text.xml 수정

1) TextView에 다음의 3개 속성 추가
    android:textColor="#FFFF00"
    android:textStyle="bold"
    android:textSize="20px"

2) EditText에 다음의 2개 속성 추가
   android:hint="글자를 입력하면 글자수를 체크합니다"
   android:singleLine="true"

2. MyEditText.java를 수정 (클릭 리스너 처리)
1) ok버튼, cancel버튼에 대해 findViewById
2) ok버튼, cancel버튼에 대해 setOnClickListener

3) OK버튼을 누르면 입력한 글자로 검색을 실행하게 한다. 
     Intent intent = new Intent(Intent.ACTION_SEARCH);
     intent.putExtra(SearchManager.QUERY, ed.getText().toString());
     startActivity(intent);

4) CANCEL 버튼을 누르면 에디트 텍스트에 입력된 글자를 지운다.
     ed.setText("");

=======================4일차==========================

[Wifi, 3G 네트워크 상태확인]

1. 레이아웃 - my_wifi.xml
1) RadioGroup 추가: id는 rdg
2) RadioGroup 안에 RadioButton 2개 추가, id는 각각 rb_wifi, rb_3g, text는 "Wifi 연결", "3G 연결"

2. MyWifi 액티비티 - onCreate오버라이딩
1) setContentView
2) findViewById (rb1, rb2)
3) wifi 상태 확인

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if(info!=null) {
   if(info.getType()==ConnectivityManager.TYPE_WIFI) {
       rb_wifi.setChecked(true);        
   } else if (info.getType()==ConnectivityManager.TYPE_MOBILE) {
       rb_3g.setChecked(true);              
   }
}

3. 퍼미션 추가
android.permission.ACCESS_NETWORK_STATE

4. Wifi 켜고 끄기
1) rb_wifi의 setOnCheckedChangeListener에 다음 코드 추가
  WifiManager wm = (WifiManager)getSystemService(WIFI_SERVICE); 
  wm.setWifiEnabled(isChecked);

2) 퍼미션 추가
android.permission.CHANGE_WIFI_STATE


5. 3G 켜고 끄기
1) ConnectivityManager cm을 final로 변경

2) rb_3g의 setOnCheckedChangeListener에 다음 코드 추가

cm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, 

"android.net.conn.CONNECTIVITY_CHANGE");

3) 퍼미션 추가
android.permission.CHANGE_NETWORK_STATE


[MyScrollView 수정]

1. Button 추가하기

Button btn = new Button(this);
btn.setText("Button " + i);
layout.addView(btn);

2. Button을 wrap_content로 추가하기

Button btn = new Button(this);
btn.setText("Button " + i);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
if(i%2==0) { // 짝수
    p.gravity = Gravity.RIGHT;
} else { // 홀수
    p.gravity = Gravity.LEFT;
}
layout.addView(btn, p);


[MySpinner 수정-1]
1. my_spinner.xml
1) Button 추가: id는 btn, text는 '이동'

2. MySpinner 액티비티
1) items 배열값을 다음과 같은 형식으로 변경 (사이트주소는 알아서)
String[] items = {"http://okgosu.net", "http://daum.net", "http://paran.com"};
2) btn을 클릭하면 스피너에 선택된 주소로 이동
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(s1.getSelectedItem().toString()));
startActivity(intent);

[MySpinner 수정-2]
1. my_spinner.xml: Spinner밑에 Gallery추가
<Gallery android:id="@+id/gal" 
   android:spacing="20px"
   android:background="#0000FF"
   android:layout_width="fill_parent"
  android:layout_height="wrap_content" />

2. MySpinner 액티비티에 어댑터 연결
Gallery gal = (Gallery)findViewById(R.id.gal);
ArrayAdapter<String> gal_adt 
= new ArrayAdapter<String>(this, android.R.layout.simple_gallery_item, items);
gal.setAdapter(gal_adt);


[MyAppList] : 설치된 App 정보 추출
1. MyAppList.java 라는 ListActivity 작성
//멤버변수 선언
private ArrayList items = new ArrayList();
private List appList;

2. onCreate함수 오버라이딩
// 앱리스트는 뽑아오기 
appList = getPackageManager().getInstalledApplications(0);

// 어댑터에 사용할 배열
Iterator itr = appList.iterator();
while (itr.hasNext()) {
  ApplicationInfo info = (ApplicationInfo)itr.next();
  items.add(info.packageName);
}

3. ListView 어댑터 설정
1) ArrayAdapter 생성
ArrayAdapter< String >  adapter 
= new ArrayAdapter< String > (this, android.R.layout.simple_list_item_1, items);
2) ArrayAdapter 설정
setListAdapter(adapter);

[MyAppList] - 단계2
ArrayAdapter에서 레이아웃을 android.R.layout.simple_list_item_1 대신에 커스텀 레이아웃을 사용하도록 한다.

1. ListView에서 사용할 행에 대한 레이아웃 생성: my_app_row.xml

1) LinearLayout에 ImageView와 TextView를 추가
2) 각각 id는 img, text1
3) ImageView의 src속성은 @drawable/icon으로 설정

2. ArrayAdapter를 다음과 같이 변경

ArrayAdapter< String >  adapter2 
= new ArrayAdapter< String > (this, R.layout.my_app_row, R.id.text1, items);

setListAdapter(adapter2);

[MyAppList] - 단계3
// 아이템을 선택하면 삭제 요청 인텐트 발생
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
   Intent i = new Intent(Intent.ACTION_DELETE);
   ApplicationInfo info = (ApplicationInfo) l.getItemAtPosition(position);
   String pname = info.packageName;
   i.setData(Uri.parse("package:" + pname));
   startActivity(i);
}


[앱 설치, 삭제 이벤트 감지]

1. MyAppReceiver extends BroadcastReceiver 클래스 생성

2. onReceive 오버라이딩
String act = intent.getAction();
String data =intent.getData().toString();
Toast.makeText(context, act + ":" + data, 1000).show();

* 참고
act 값이 android.intent.action.PACKAGE_ADDED 면 패키지 추가
android.intent.action.PACKAGE_REMOVED 면 패키지 삭제

3. 안드로이드 매니페스트에 리시버 등록
<receiver android:name="MyAppReceiver">
     <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package" />
     </intent-filter>
</receiver>
[인텐트 실습]
1. 버튼7을 누르면 다음과 같이 인텐트를 발생시킨다.
1) 액션은 "abc" 2) 카테고리는 default 3) mime type은 없음

방법1) startActivity(new Intent("abc"));
방법2) Intent intent = new Intent("abc");
            startActivity(intent);

2. 1의 조건으로 인텐트를 수신하도록 MyTextStyle에 인텐트 필터를 추가한다.
<intent-filter>
    <action android:name="abc" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

3. 버튼8을 누르면 다음과 같이 인텐트를 발생시킨다
1) 액션은 "abc" 2) 카테고리는 default 3) mime type은 "abc/def"

Intent intent = new Intent("abc");
intent.setType("abc/def");
startActivity(intent);

4. 3의 조건으로 인텐트를 수신하도록 MyEditText에 인텐트 필터를 추가한다.
<intent-filter>
    <action android:name="abc" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="abc/def" />
</intent-filter>


[인텐트 URI 설정방법]
1) Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://okgosu.net"));

2) Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addData(Uri.parse("http://okgosu.net"));



==================5일차=====================

[과제] MyMp3List
1. MyMp3List 액티비티 생성
: public class MyMp3List extends ListActivity


2. MyMp3List의 onCreate 에서 음악 데이터 추출
[참고] 쿼리 예) select col1, col2, col3 from mytable where col1 = 'con1' order by col4
// 컨텐트프로바이더 인자
// 1) projection = {"col1", "col2", "col3"};
// 2) selection = {"col1"};
// 3) selectionArgs = "con1"
// 4) sortOrder = "col4"
// 컨텐트URI, 가져올컬럼의이름, 선택할조건의 컬럼이름, 선택조건, 정렬할컬럼
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);

3. 커서어댑터 연결
// SimpleCursorAdapter연결: 컨텍스트, 레이아웃ID, 커서, 보여줄 컬럼배열, 컬럼을 보여줄 레이아웃 아이디 배열 
String[] col_arr = {MediaStore.Audio.Media.TITLE};
int[] view_id_arr = {android.R.id.text1};
SimpleCursorAdapter adapter
= new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, col_arr, view_id_arr);
setListAdapter(adapter);

[참고] 간단히 줄인 예
setListAdapter(new SimpleCursorAdapter(this, 
android.R.layout.simple_list_item_1, cursor, 
new String[] {MediaStore.Audio.Media.TITLE},  
new int[] {android.R.id.text1}));


4. MP3 리스트의 아이템을 클릭하면 다음과 같이 인텐트를 발생 (onListItemClick)

Uri uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);

[MP3 플레이어] MyMp3Player extends Activity

1. 레이아웃: my_mp3_player.xml
: (LinearLayout)에 다음 위젯들 추가
1)TextView (txt_song, 노래제목) 2) Button (btn_play, 재생 ), 3) Button (btn_stop, 정지 )

2. MyMp3Player 액티비티 생성
:  onCreate에서 Intent로 넘어온 URI값을 txt_song에 표시
Uri uri = getIntent().getData();
String uriString = uri.toString();

3. MyMp3Player가 다음의 음악재생 인텐트를 수신하도록 매니페스트 추가
<activity android:name="MyMp3Player" android:label="MyMp3Player 앱">
     <intent-filter>
         <action android:name="android.intent.action.VIEW" />
         <category android:name="android.intent.category.DEFAULT" />
         <data android:mimeType="audio/mp3" />
     </intent-filter>
</activity>


[MyMp3List에서 아이템 클릭시 노래제목 송신]

1. MyMp3List의 onListItemClick에 다음 추가

// 노래 제목 추가
TextView tv = (TextView)v;
String song_title  = tv.getText().toString();
intent.putExtra("song", song_title);

2. MyMp3Player의 onCreate에서 노래 제목 수신
String song = getIntent().getStringExtra("song");
txt_song.setText(song);

3. MyMp3Player에 멤버변수 추가
MediaPlayer player;

4. MyMp3Player onCreate: btn_play를 클릭하면 음악 재생
if(player == null) player = new MediaPlayer ();
player.setDataSource(MyMp3Player.this, uri);
player.prepare();
player.start();

5. btn_stop을 누르면 노래 재생 중지
if(player !=null) {
   player.stop();
   player.release();
   player = null;
}

[환경설정 항목 2개 추가]
1. my_pref.xml에 다음 2개 항목을 추가

<CheckBoxPreference android:key="my_pref_ori"  android:title="항상 가로화면으로 봅니다." />
<EditTextPreference android:key="my_pref_title"   android:title="액티비티의 제목을 설정합니다." />

2. MyXMLPrefView.java (onCreate 함수 내에)

1)  키값이 my_pref_title, my_pref_ori인 항목값을 읽어오도록 로직 추가
String activity_title = sp.getString("my_pref_title", "액티비티 제목 없음");
boolean activity_ori = sp.getBoolean("my_pref_ori", false);

2) 액티비티에 적용
  setTitle(activity_title);  // 액티비티 타이틀 변경
  if(activity_ori) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 화면 회전 처리 : 항

상 가로로



[SD카드로 입출력] MyReadBin.java

1. 권한 추가 (AndroidManifest.xml)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2. onResume함수 수정
   1)  openFileInput부분은 주석처리
    // InputStream in = openFileInput(BIN_FILE_NAME); 
    2) 대신에 다음 2라인 추가
    File f = new File("/sdcard/okgosu.txt");
    InputStream in = new FileInputStream(f);

3. onPause함수 수정
   1) openFileOutput 부분은 주석 처리
   // OutputStreamWriter out = new OutputStreamWriter(openFileOutput(BIN_FILE_NAME, 0));
   2) 대신에 다음의 4라인 추가
   File f = new File("/sdcard/okgosu.txt");
   if(!f.exists()) f.createNewFile();
   OutputStream os = new FileOutputStream(f);
   OutputStreamWriter out = new OutputStreamWriter(os);

------------------------------------------------
상품조회 테이블 (prod)
-----------------------------------------
아이디    상품코드         상품명
_id         prod_code     prod_name
1            snk01             새우깡
2            snk02             맛동산
3            snk03             양파링....































[연락처 DB쿼리] MyContactManager ListActivity 생성

1. 매니페스트에 권한 추가
<uses-permission android:name="android.permission.READ_CONTACTS"/>

2. MyContactManager (ListActivity)의 onCreate에서

Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

// 가져올 컬럼의 이름값 배열
String[] cols = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME};

// 컬럼을 매치시킬 View의 ID 배열
int[] view_ids = {android.R.id.text2, android.R.id.text1};

// Cursor 객체를 화면에 연결시켜주기 위한 Adapter생성
SimpleCursorAdapter adapter
= new SimpleCursorAdapter(this, 
android.R.layout.simple_list_item_2, cursor, cols, view_ids);

// Adapter를 ListView에 연결
setListAdapter(adapter);

[HTTP 처리-오픈API] 
0. 웹주소 확인
http://okgosu.net/book/get_xml_data.php?kind=green
http://okgosu.net/book/get_xml_data.php?kind=yellow

1. 액티비티 작성 MyHttpDemo - ListActivity
// 멤버변수 선언
ArrayList<String> items = new ArrayList<String>();

2. onCreate 오버라이딩
HttpClient hc = new DefaultHttpClient();
HttpGet req = new HttpGet("http://okgosu.net/book/get_xml_data.php?kind=green");
try {
   ResponseHandler<String> res = new BasicResponseHandler();
   String resStr = hc.execute(req, res); // XML결과값
   DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
   Document doc = builder.parse(new InputSource( new StringReader(resStr)));
   NodeList nl = doc.getElementsByTagName("item");
   items.clear();
   for(int i=0; i<nl.getLength(); i++){
       Element el = (Element)nl.item(i);
       String data = (String)el.getFirstChild().getNodeValue(); // Node값
       items.add(data);
    }
    setListAdapter(new ArrayAdapter(this,  android.R.layout.simple_list_item_1, items));
} catch (Exception e) {
    e.printStackTrace();
}

[네이버 오픈 API 호출]
1. my_open_api.xml 레이아웃 생성
: 레이아웃에 포함할 요소
1) Spinner (sp) 
2) EditText (ed)
3) Button (btn)

2. MyOpenApi.java (ListActivity) 생성
1) 멤버변수 선언: sp, ed, btn

3. MyOpenApi의 onCreate
1) 스피너는 다음의 배열값을 보여주도록 설정함: {"book", "movieman", "shop"};
2) btn을 클릭하면 HttpGet객체를 생성하여 오픈API 데이터 페치
StringBuilder url = new StringBuilder("http://openapi.naver.com/search?");
url.append("target=" + sp.getSelectedItem().toString());
url.append("&query=" + ed.getText().toString());
url.append("&key=각자네이버키");
HttpGet req = new HttpGet(url.toString());
try {
~~중략 ~
    setListAdapter(new ArrayAdapter(this,  android.R.layout.simple_list_item_1, items));
} catch (Exception e) {
    e.printStackTrace();
}

4. DOM파싱의 for 문의 data설정을
1) 고치기 전 내용
String data = (String)el.getFirstChild().getNodeValue();
2) 고친 내용
String data = el.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();

[사진정보 쿼리]: MyAlbum ListActivity

Cursor c = getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

// 가져올 컬럼의 이름값 배열
String[] cols = {Images.Media.TITLE};

// 컬럼을 매치시킬 View의 ID 배열
int[] view_ids = {android.R.id.text1};

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, c, cols, view_ids);

// 어댑터 설정
setListAdapter(adapter);


* 리스트 클릭시 이미지 보이도록 (onListItemClick)

Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
Intent intent = new Intent(Intent.ACTION_VIEW);
startActivity(intent);

======================6일차=======================

[MyTaskList] 
1. MyTaskList.java 라는 ListActivity 작성
//멤버변수 선언
private ArrayList items = new ArrayList();
private List taskList;

2. onCreate함수 오버라이딩: 포그라운드 액티비티 정보들
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
taskList = activityManager.getRunningTasks(7);
Iterator itr = taskList.iterator();
while (itr.hasNext()) {
  RunningTaskInfo info = (RunningTaskInfo)itr.next();
  items.add(info.topActivity.getClassName()); // 클래스 이름
}
3. ArrayAdapter 생성 및 ListView에 설정
4. 퍼미션 추가 < uses-permission android:name="android.permission.GET_TASKS"/ > 

5. 항목을 클릭하면 앱을 강제 종료
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
   ActivityManager actMng = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
   RunningTaskInfo info =(RunningTaskInfo)taskList.get(position);
   String pname = info.topActivity.getPackageName();
   actMng.restartPackage(pname);// 2.1
}
* 참조
// 권한 <uses-permission android:name="android.permission.RESTART_PACKAGES"/> 
//actMng.killBackgroundProcesses(pname);// 2.2


// okgosu.net 블로그 새글 확인 로직
[새글 확인]
String uri = "http://okgosu.net/zbxe/deveng/rss"; // RSS 주소
HttpClient hc = new DefaultHttpClient();
HttpGet req = new HttpGet(uri);
try {
      ResponseHandler<String> resHandler = new BasicResponseHandler();
      String resHandlerXML = hc.execute(req, resHandler);// RSS XML 리턴
      DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
      Document doc = builder.parse(new InputSource( new StringReader(resHandlerXML)));
      NodeList list = doc.getElementsByTagName("item"); 
      for (int i = 0; i < list.getLength(); i++) {
          Element el = (Element) list.item(i);
          String data = el.getElementsByTagName("pubDate").item(0).getFirstChild().getNodeValue();
          Calendar checkDate = Calendar.getInstance(); 
          checkDate.set(2011, 0, 30);//2011.1.30
          Calendar itemDate = Calendar.getInstance();
          itemDate.setTime(new Date(Date.parse(data)));
          if(itemDate.after(checkDate)) {
         // 2011.1.30 이후의 새글 등록됨 
      res = true;
          }
     }
} catch (Exception e) {
   e.printStackTrace();
}


//MD5값
D4:0D:30:8C:76:D5:9A:FE:B4:39:38:AE:FB:E6:93:C0

// apiKey값
03XqKyy9AD22vc9mLt1TAlzo5PYgU3M6uJPu72w


[MyMapView에 마커표시] mapControl.setZoom(15); 밑에

MapView.LayoutParams mapMarkerParams = new MapView.LayoutParams(
   LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
   newPoint, MapView.LayoutParams.TOP_LEFT );

ImageView mapMarker = new ImageView(getApplicationContext());
mapMarker.setImageResource(R.drawable.gmarker);
map.addView(mapMarker, mapMarkerParams);


[과제] GPS에서 현재 위치를 받아와 MapView에 표시하기
: MyLocationView의 GPS현재 위치확인 로직 + MyMapView의 위치표시 로직

1. 레이아웃: my_position_view.xml (LinearLayout: orientation은 vertical)
1) "내위치표시" 버튼(id=btn_mypos)을 추가
2) MapView 추가 : my_map_view.xml 참조

2. 액티비티 생성
1) MyPositionView extends MapActivity implements LocationListener
2) 멤버변수 선언
MapController mapControl;

2) onCreate 오버라이딩
mapControl = map.getController();

3. btn_mypos 버튼을 누르면 다음의 코드 실행
LocationManager locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.NO_REQUIREMENT);
criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
String best = locationMgr.getBestProvider(criteria, true); 
locationMgr.requestLocationUpdates(best, 1000, 0, MyPositionView.this);

4. LocationListener의 onLocationChanged에서 현재 위치를 맵뷰에 표시
GeoPoint newPoint = new GeoPoint((int) (location.getLatitude()* 1E6), 
(int) (location.getLongitude() * 1E6));
mapControl.animateTo(newPoint);


[SMS수신]
1. 퍼미션 추가: 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

2. MySMSReceiver 클래스 작성: MySMSReceiver extends BroadcastReceiver 

3. 매니페스트에 MySMSReceiver 추가
<receiver android:name="MySMSReceiver">  
     <intent-filter>  
           <action android:name="android.provider.Telephony.SMS_RECEIVED" />  
       </intent-filter>  
</receiver> 

4. MySMSReceiver onReceive(Context context, Intent intent) 오버라이딩
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
   StringBuilder ab = new StringBuilder();
   Bundle bundle = intent.getExtras();   
   if(bundle != null) {
         Toast.makeText(context, "문자 왔음", 1000).show();
   }
}


5. bundle객체로부터 문자내용 파싱 
1) import android.telephony.SmsMessage; 추가
2) SmsMessage 파싱
Object[] pdusObj = (Object[]) bundle.get("pdus"); 
StringBuilder sb = new StringBuilder();
SmsMessage[] messages = new SmsMessage[pdusObj.length]; 
    for (int i = 0; i< pdusObj.length; i++) { 
             messages[i] = SmsMessage.createFromPdu ((byte[])pdusObj[i]); 
             sb.append("보낸사람:");
             sb.append(messages[i].getDisplayOriginatingAddress());                  
             sb.append("메시지내용:");
             sb.append(messages[i].getDisplayMessageBody());
    } 

profile