[현재 접속자 현황]
안드로이드 관련 팁 게시판입니다.
글수 27
[실습] 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());
}






okgosu
최근 답변 댓글