[현재 접속자 현황]
안드로이드 관련 팁 게시판입니다.
글수 27
# 안드로이드 애플리케이션 타입 4가지
1) <activity> </activity> 액티비티 (화면)
2) <service> </service> 서비스(백그라운드 서비스)
3) <receiver> </receiver> 브로드캐스트 리시버(이벤트 수신)
4) <provider> </provider> 컨텐트 프로바이더 (데이터 처리)
# 실습 3일차
[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) {
}
});
4. onCheckedChanged에 GPS 다이얼로그 띄우기
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클릭 리스너 설정 (setOnClickListener이용)
3. imgBtn의 onClcik에 다음 내용 추가
WallpaperManager wallpaperManager = WallpaperManager.getInstance(MyImageView.this);
iv.setDrawingCacheEnabled(true);
try {
wallpaperManager.setBitmap(iv.getDrawingCache());
} catch (IOException e) {
e.printStackTrace();
}
[EditText 실습]
1. MyEditText.java를 수정
1) OK버튼을 누르면 입력한 글자로 검색을 실행하게 한다.
Intent intent = new Intent(Intent.ACTION_SEARCH);
intent.putExtra(SearchManager.QUERY, 에디트텍스트에 입력된 값);
// ed.getText().toString()
startActivity(intent);
2) CANCEL 버튼을 누르면 에디트 텍스트에 입력된 글자를 지운다.
ed.setText("");
2. my_edit_text.xml 수정
1) TextView에 다음의 3개 속성 추가
android:textColor="#FFFF00"
android:textStyle="bold"
android:textSize="20px"
2) EditText에 다음의 2개 속성 추가
android:hint="글자를 입력하면 글자수를 체크합니다"
android:singleLine="true"
[MyScrollView 수정]
1. Button 추가하기 (for 문 안에)
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);
layout.addView(btn, p);
3. 정렬
if(i%2==0) { // 짝수
p.gravity = Gravity.RIGHT;
} else { // 홀수
p.gravity = Gravity.LEFT;
}
# 실습 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 (rb_wifi, rb_3g)
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
[MySpinner 수정]
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);
[Spinner 데이터표시 방법]
1. 레이아웃 my_site.xml 생성 (LinearLayout)
1) Spinner 추가: id는 sp
2) Button 추가: id는 btn, text는 '이동'
2. MySite 액티비티 onCreate오버라이딩
1) setContentView호출
2) findViewById (sp, btn)
3) items 배열 선언 (사이트주소는 알아서)
String[] items = {"http://okgosu.net", "http://daum.net", "http://paran.com"};
3. ArrayAdapter연결
ArrayAdapter<String> adapter
= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp.setAdapter(adapter);
4. btn을 클릭하면 스피너에 선택된 주소로 이동
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(s1.getSelectedItem().toString()));
startActivity(intent);
[MyListView 수정]
1. 컨텍스트메뉴 선택시 명시적인텐트 호출(선택된 아이템에 해당하는 클래스)
: onContextItemSelected 함수에 다음 코드 추가
try {
Intent intent = new Intent(this, Class.forName("kcdi.android." + item.getTitle()));
startActivity(intent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
2. 옵션메뉴 선택시 암시적 인텐트 호출(선택된 아이템에 해당하는 액션값)
1) onOptionsItemSelected 함수 내용
startActivity(new Intent(item.getTitle().toString()));
2) 인텐트 필터 추가
MyImageView에 다음 인텐트 필터 추가
<intent-filter>
<action android:name="myimage"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
MyTextStyle에 다음 인텐트 필터 추가
<intent-filter>
<action android:name="mytext"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
MyWebView에 다음 인텐트 필터 추가
<intent-filter>
<action android:name="myweb"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
[MyAppList] : 설치된 App 정보 추출
1. MyAppList.java 라는 ListActivity 작성
//멤버변수 선언
private ArrayList items = new ArrayList();
private List appList;
2. onCreate함수 오버라이딩
// 설치된 앱리스트 객체 추출 (PackageManager)
appList = getPackageManager().getInstalledApplications(0);
// 어댑터에 사용할 배열(ApplicationInfo) 초기화 (Iterator패턴 사용)
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);
String pname = (String) l.getItemAtPosition(position);
i.setData(Uri.parse("package:" + pname)); // 인텐트에 패키지 정보 Uri 추가
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]
1.MyIntentExam.java 수정: 버튼1을 누르면 다음과 같이 인텐트를 발생시킨다.
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>
[인텐트 실습-2]
1. MyIntentExam.java 수정: 버튼2을 누르면 다음과 같이 인텐트를 발생시킨다
1) 액션은 "abc" 2) 카테고리는 default 3) mime type은 "abc/def"
Intent intent = new Intent("abc");
intent.setType("abc/def");
startActivity(intent);
2. 매니페스트수정: 3의 조건으로 인텐트를 수신하도록 MyEditText에 인텐트 필터를 추가한다.
<intent-filter>
<action android:name="abc" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="abc/def" />
</intent-filter>
#실습 5일차
[과제] MyMp3List
1. MyMp3List 리스트 액티비티 생성
: public class MyMp3List extends ListActivity
2. MyMp3List의 onCreate 에서 음악 데이터 추출
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
3. 커서어댑터 연결
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);
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);
[MyIntentCaller/ MyIntentReceiver 과제]
1. my_intent_caller.xml 에 Spinner 추가 (id는 sp)
2. MyIntentCaller의 onCreate에서 Spinner는 다음의 데이터를 표시하도록 함
String[] items = {"book", "shop", "movie" };
final Spinner sp = (Spinner) findViewById(R.id.sp);
sp.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items));
3. MyIntentCaller에서 "인텐트호출"버튼 클릭핸들러에서
Spinner의 선택값을 "mychoice"라는 이름으로 MyIntentReceiver로 전송
intent.putExtra("mychoice", sp.getSelectedItem().toString());
4. MyIntentReceiver에서 수신한 항목을 Toast로 표시
String choice = getIntent().getStringExtra("mychoice");
Toast.makeText(this, choice, 1000).show();
[환경설정 항목 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 양파링....
[MyDBExam 수정, 삭제 처리]
1. 멤버변수 추가
String prod_id = null;
2. onListItemClick 오버라이딩하여 선택한 id값을 prod_id에 저장
prod_id = String.valueOf(id);
3. 선택한 로우 삭제
1) DB를 Write모드로 오픈: p58 "DB 접속 방법" 참조
2) 데이터 삭제
String whereClause = MyProdDBCons.PROD_ID+ "= ? ";
String[] whereArgs = {prod_id};
sdb.delete(MyProdDBCons.TABLE_NAME, whereClause, whereArgs);
sdb.close();
Toast.makeText(MyDBExam.this, "삭제되었습니다", 1000).show();
4. 선택한 로우 수정
1) DB를 Write모드로 오픈: p58 "DB 접속 방법" 참조
2) 데이터 수정
String whereClause = MyProdDBCons.PROD_ID+ "= ? ";
String[] whereArgs = {prod_id};
ContentValues values = new ContentValues();
values.put(MyProdDBCons.PROD_CODE, ed_prod_code.getText().toString());
values.put(MyProdDBCons.PROD_NAME, ed_prod_name.getText().toString());
sdb.update(MyProdDBCons.TABLE_NAME, values, whereClause, whereArgs);
sdb.close();
Toast.makeText(MyDBExam.this, "수정되었습니다", 1000).show();
[연락처 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);
[사진정보 쿼리]: MyAlbum ListActivity
1. onCreate 오버라이딩
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);
2. 리스트 클릭시 이미지 보이도록 onListItemClick 오버라이딩
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
[컨텐트 프로바이더 활용] MyCPDemo의 로직 설정
q
1. btn1을 클릭하면 DB데이터 건수 조회
Cursor c = getContentResolver().query(MyProdDBCons.CONTENT_URI, null, null, null, null);
Toast.makeText(MyCPDemo.this, "건수:" + c.getCount(), 1000).show();q
2. btn2를 클릭하면DB쿼리결과를ListView에보여줌
// select할 컬럼 목록
String columns[] = {MyProdDBCons.PROD_ID, MyProdDBCons.PROD_CODE};
// 커서 쿼리
Cursor c = getContentResolver().query(
MyProdDBCons.CONTENT_URI, columns, null, null, null);
// 가져올 컬럼의 이름값 배열
String[] cols = {MyProdDBCons.PROD_ID, MyProdDBCons.PROD_CODE};
// 컬럼을 매치시킬 View의 ID 배열
int[] view_ids = {android.R.id.text1, android.R.id.text2};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(MyCPDemo.this,
android.R.layout.simple_list_item_2, c, cols, view_ids);
setListAdapter(adapter);
3. btn3을 클릭하면 DB에 데이터 1건 입력
ContentValues values = new ContentValues();
values.put(MyProdDBCons.PROD_CODE, ed_prod_code.getText().toString());
values.put(MyProdDBCons.PROD_NAME, ed_prod_name.getText().toString());
getContentResolver().insert(MyProdDBCons.CONTENT_URI, values);q
Toast.makeText(MyCPDemo.this, "입력되었습니다", 1000).show();
4. 아이템 선택 이벤트 처리
1) 멤버변수 추가
String prod_id = null;
2) onListItemClick 오버라이딩하여 선택한 id값을 prod_id에 저장
prod_id = String.valueOf(id);
5. btn4를 클릭하면 DB에 데이터 1건 수정
ContentValues values = new ContentValues();
values.put(MyProdDBCons.PROD_CODE, ed_prod_code.getText().toString());
values.put(MyProdDBCons.PROD_NAME, ed_prod_name.getText().toString());
String where = MyProdDBCons.PROD_ID+ "= ? ";
String[] selectionArgs = {prod_id};
getContentResolver().update(MyProdDBCons.CONTENT_URI, values, where, selectionArgs);
Toast.makeText(MyCPDemo.this, "수정되었습니다", 1000).show();
q
6. btn5을 클릭하면 DB에 데이터 1건 삭제
String where = MyProdDBCons.PROD_ID+ "= ? ";
String[] selectionArgs = {prod_id};
getContentResolver().delete(MyProdDBCons.CONTENT_URI, where, selectionArgs);
Toast.makeText(MyCPDemo.this, "삭제되었습니다", 1000).show();
[MyCPDemo 수정] 커스텀 레이아웃 생성
: 현재 PROD_ID, PROD_CODE만 보이는데,
PROD_ID, PROD_CODE, PROD_NAME도 같이 보이도록 커스텀 레이아웃을 설정한다.
1. ListView에서 사용할 행에 대한 레이아웃 생성: my_prod_row.xml
1) LinearLayout에 ImageView 1개, TextView 3개를 추가
2) 각각 id는 img, text1, text2, text3
3) ImageView의 src속성은 @drawable/icon으로 설정
4) text1 은 android:textColor="#FF0000" android:layout_width="20dp" android:layout_height="wrap_content"
5) text2 은 android:textColor="#FFFF00" android:layout_width="50dp" android:layout_height="wrap_content"
6) text3 은 android:layout_weight="1"
2. MyCPDemo의 조회 부분을 다음과 같이 변경
String columns[] = {MyProdDBCons.PROD_ID, MyProdDBCons.PROD_CODE, MyProdDBCons.PROD_NAME};
Cursor c = getContentResolver().query(
MyProdDBCons.CONTENT_URI, columns, null, null, null);
String[] cols = {MyProdDBCons.PROD_ID, MyProdDBCons.PROD_CODE, MyProdDBCons.PROD_NAME};
int[] view_ids = {R.id.text1, R.id.text2, R.id.text3};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(MyCPDemo.this,
R.layout.my_prod_row, c, cols, view_ids);
setListAdapter(adapter);
[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);// android 2.1
}
* 필요 권한 <uses-permission android:name="android.permission.RESTART_PACKAGES"/>
[RSS리더] HttpClient 사용
0. 웹주소 확인
http://okgosu.net/zbxe/deveng/rss
1. 액티비티 작성 MyRSS - ListActivity
// 멤버변수 선언
ArrayList<String> items = new ArrayList<String>();
2. onCreate 오버라이딩 (DOM파싱이므로 dom.Element를 import)
HttpClient hc = new DefaultHttpClient();
HttpGet req = new HttpGet("http://okgosu.net/zbxe/deveng/rss");
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("title");
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();
}
// 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 resStr = hc.execute(req, resHandler);// RSS XML 리턴
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new InputSource( new StringReader(resStr)));
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, 2, 15);//2011.3.15
Calendar itemDate = Calendar.getInstance();
itemDate.setTime(new Date(Date.parse(data)));
if(itemDate.after(checkDate)) {
// 2011.3.15 이후의 새글 등록됨
res = true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
[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);
[특정 인텐트에 대해 호출될 클래스 정보 미리 뽑기]
Intent intent = new Intent(Intent.ACTION_MAIN);
// 호출조건
// 1) act: main
// 2) cat: default
// 3) mime: 없음
List<ResolveInfo> res = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
Iterator<ResolveInfo> itr = res.iterator();
while(itr.hasNext()) {
ResolveInfo info = itr.next();
String appName = info.activityInfo.name;
}
[수신 인텐트 정보] 각 액티비티의 onCreate에 다음 추가
Intent check = getIntent();
String act = check.getAction();//인텐트 액션
String mime = check.getType();// 인텐트 MIME
String pname = this.getPackageName(); // 현재 실행될 액티비티 패키지명
String cname = this.getClass().getName(); // 현재 실행될 액티비티 클래스명






okgosu
최근 답변 댓글