인터넷 권한 있어야 합니다 manifest.xml -> permission -> INTERNET



<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webkit"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />


package kr.android.weather;

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

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.BufferedHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

public class WeatherDemo extends Activity {
	//기상청 날씨정보
	private static final String WEATHER_URL 
	="http://www.kma.go.kr/XML/weather/sfc_web_map.xml";
	private WebView browser;
	private List<Forecast> forecasts = new ArrayList<Forecast>();

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		browser=(WebView)findViewById(R.id.webkit);
		updateForecast();       
	}

	private void updateForecast(){
		buildForecastsByXmlPullParser(getStreamFromUrl());

		String page=generatePage();

		/*        loadDataWithBaseURL (
        String baseUrl:기본페이지, 
        String data,  
        String mimeType, 
        String encoding, 
        String historyUrl :에러시 돌아갈 페이지)
		 */
		browser.loadDataWithBaseURL(null,page,"text/html","UTF-8",null);
	}

	private InputStream getStreamFromUrl(){
		InputStream input=null;

		try{
			HttpClient client = new DefaultHttpClient();
			HttpGet getMethod =new HttpGet(WEATHER_URL);
			//응답을 받을 객체
			HttpResponse response =(HttpResponse)client.execute(getMethod);
			//응탑 수신 처리
			HttpEntity entity =response.getEntity();
			BufferedHttpEntity buf=new BufferedHttpEntity(entity);
			input =buf.getContent();
		}
		catch (Exception e){
			Log.e("WeatherDemo","Exception fetching data",e);
			Toast.makeText(this, "요청실패: "+e.toString(), 4000).show();
		}
		return input;
	}

	public void buildForecastsByXmlPullParser(InputStream input){
		String desc =null;
		String temp =null;
		String locale =null;
		try{
			XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
			XmlPullParser parser = factory.newPullParser();
			//파서에 스트림 연결 (default = "UTF-8")
			parser.setInput(input, null);

			while(parser.getEventType()!=XmlPullParser.END_DOCUMENT){

				if(parser.getEventType()==XmlPullParser.START_TAG){
					if(parser.getName().equals("local")){
						//날씨처리 //3번째 속성 (0,1,2,3,4)
						desc =parser.getAttributeValue(2);
						//온도 처리 
						temp=parser.getAttributeValue(3);
					}
				}else if(parser.getEventType()==XmlPullParser.TEXT){
					//지역정보 처리
					locale =parser.getText();
				}else if (parser.getEventType()==XmlPullParser.END_TAG){
					forecasts.add(new Forecast(locale,desc,temp));
				}
				//XML의 파서 커서를 다음 태그로 이동시킴
				parser.next();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}      

	public String generatePage() {
		//StringBuilder : StringBuffer 와 차이점은 StringBuilder는 동기화를 지원한다
		StringBuilder bufResult=new StringBuilder("<html><body><table width=\"100%\">");

		bufResult.append("<tr><th width=\"30%\">지역</th>"+
				"<th width=\"50%\">날씨</th><th width=\"20%\">온도</th></tr>");

		//확장 for문 
		for (Forecast forecast : forecasts) {
			bufResult.append("<tr><td align=\"center\">");
			bufResult.append(forecast.locale);
			bufResult.append("</td><td align=\"center\">");
			bufResult.append(forecast.desc);
			bufResult.append("</td><td>");
			bufResult.append(forecast.temp);
			bufResult.append("</td></tr>");
		}

		bufResult.append("</table></body></html>");

		//StringBuilder를 String으로 넘겨줌
		return(bufResult.toString());
	}

	class Forecast {
		String locale;
		String desc;
		String temp;

		public Forecast(String locale,String desc,String temp){
			this.locale = locale;
			this.desc = desc;
			this.temp = temp;
		}
	}
}



src/ kr.android.sqlite / SQListDemo
package kr.android.sqlite;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseAdapter {
	/*=-=-=-=-=-=-=-=-상수 정의 시작=-=-=-=-=-=-=-=-*/
	//Log 처리를 위한 TAG지정
	static final String TAG = "DatabaseHandler";
	//데이터 베이스 파일이름
	static final String DB_NAME ="daily_memo.db";
	//테이블 이름
	static final String TABLE_NAME="daily_memo";
	//데이터베이스 각열의 이름
	static final String MEMO_ID="_id";
	static final String MEMO_CONTENT="content";
	//컬럼 인덱스
	static final int ID_INDEX= 0;
	static final int CONTENT_INDEX =1;
	//컬럼 명세
	static final String[] PROJECTION = new String[] {MEMO_ID,MEMO_CONTENT};
	//테이블 생성 SQL
	static final String CREATE_TABLE ="CREATE table "+TABLE_NAME+" ("+MEMO_ID+" " +
			"integer primary key autoincrement, "+MEMO_CONTENT+" text not null);";
	//테이블 삭제 SQL
	static final String DROP_TABLE = "DROP TABLE IF EXISTS "+TABLE_NAME+";";
	/*=-=-=-=-=-=-=-=-상수 정의 끝=-=-=-=-=-=-=-=-*/

	//데이터 베이스 연동 객체
	private SQLiteDatabase db;
	//데이터 베이스를 이용하는 어플리케이션의 컨텍스트
	private Context context;

	public DatabaseAdapter(Context context){
		this.context=context;
	}

	//SQLiteDatabase 생성
	public void open() throws SQLException{
		try{
			db =(new DatabaseHelper(context)).getWritableDatabase();
		}catch(SQLiteException e){
			db =(new DatabaseHelper(context)).getReadableDatabase();
		}
	}

	//SQLiteDatabase 자원정리
	public void Close(){
		db.close();
	}

	//전체 행을 ID의 내림차순으로 호출
	public Cursor fetchAllMemo(){
		return db.query(TABLE_NAME, //테이블명
				PROJECTION, //컬럼명세
				null,		//where 절
				null,		//where 절에 전달될 데이터
				null,		//group by
				null,		//having
				MEMO_ID + " DESC " //order by
				);
	}
	//업데이트
	public void setMemo(String id, String content){

		//업데이트 값 설정
		ContentValues values = new ContentValues();
		//데이터 등록(컬럼명 , 수정할 데이터)
		values.put(MEMO_CONTENT, content);

		//행을 업데이트
		db.update(TABLE_NAME,	//테이블 명
				values,			//수정할 데이터
				MEMO_ID + " = ?",	//where절
				new String[]{ id }	//where절 ?에 전달될 primary key
				);
	}
	//검색
	public String searchMemo(String str){
		//읽을 데이터의 조건
		String where = MEMO_CONTENT+" like ?";
		//where의 ?을 대체할 매개 변수
		String param = str.substring(0,1) + "%";

		//검색
		Cursor c = db.query(
				TABLE_NAME,
				PROJECTION,
				where,	//WHERE
				new String[] { param },	//LIKE
				null,	//GROUP BY
				null,	//HAVING
				MEMO_ID+ " DESC",	//ORDERED BY 새로운 정렬
				"10");	//LIMIT 최대 10개

		StringBuffer buff = new StringBuffer();
		if(c.moveToFirst()){
			//검색 결과를 차례로 꺼내 문자열에 추가
			do{
				long id = c. getLong(ID_INDEX);
				buff.append("id(").append(id).append(") ");

				String memo = c.getString(CONTENT_INDEX);
				buff.append(memo).append("\n");
			}while(c.moveToNext());
		}
		c.close();
		return buff.toString();
	}

	//데이터를 추가하고 추가된 데이터의 primary key(_id)반환
	public String addMemo(String content){
		ContentValues values = new ContentValues();
		values.put(MEMO_CONTENT,  content);
		long id =db.insert(TABLE_NAME, MEMO_CONTENT, values);
		if(id < 0){
			return "";
		}
		return Long.toString(id);
	}

	//지정된 ID의 행삭제
	public void deleteMemo(String id){
		db.delete(TABLE_NAME, //테이블명
				MEMO_ID + " = ?", //where절
				new String[] { id } //where절 ? 에 전달될 데이터
				);
	}

	/*=-=-=--=-=-=-=-=-=SQLiteOPenHelper를 상속받아 구현한 클래스=-=-=-=-=-=-=-=-*/

	public class DatabaseHelper extends SQLiteOpenHelper{

		public DatabaseHelper(Context context){
			super(context, DB_NAME, null, 1);
		}

		//데이터 베이스를 새로 만든 다음 호출
		public void onCreate(SQLiteDatabase db){
			//내부에 테이블 만들기
			db.execSQL(CREATE_TABLE);
		}
		//존재하는 데이터 베이스로 정의하고 있는 버전이 다를때 super(context, DB_NAME, null, 1); -> 2
		public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
			Log.w(TAG,"Version mismatch : "+oldVersion+" to "+newVersion);
			//여기에서는 테이블을 삭제하고 새로 작성함
			//일반적으로 테이블의 데이터 변환을 수행
			db.execSQL(DROP_TABLE);
			onCreate(db);
		}
	}
}


src/ kr.android.sqlite / DatabaseAdapter
package kr.android.sqlite;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DatabaseAdapter {
	/*=-=-=-=-=-=-=-=-상수 정의 시작=-=-=-=-=-=-=-=-*/
	//Log 처리를 위한 TAG지정
	static final String TAG = "DatabaseHandler";
	//데이터 베이스 파일이름
	static final String DB_NAME ="daily_memo.db";
	//테이블 이름
	static final String TABLE_NAME="daily_memo";
	//데이터베이스 각열의 이름
	static final String MEMO_ID="_id";
	static final String MEMO_CONTENT="content";
	//컬럼 인덱스
	static final int ID_INDEX= 0;
	static final int CONTENT_INDEX =1;
	//컬럼 명세
	static final String[] PROJECTION = new String[] {MEMO_ID,MEMO_CONTENT};
	//테이블 생성 SQL
	static final String CREATE_TABLE ="CREATE table "+TABLE_NAME+" ("+MEMO_ID+" " +
			"integer primary key autoincrement, "+MEMO_CONTENT+" text not null);";
	//테이블 삭제 SQL
	static final String DROP_TABLE = "DROP TABLE IF EXISTS "+TABLE_NAME+";";
	/*=-=-=-=-=-=-=-=-상수 정의 끝=-=-=-=-=-=-=-=-*/

	//데이터 베이스 연동 객체
	private SQLiteDatabase db;
	//데이터 베이스를 이용하는 어플리케이션의 컨텍스트
	private Context context;

	public DatabaseAdapter(Context context){
		this.context=context;
	}

	//SQLiteDatabase 생성
	public void open() throws SQLException{
		try{
			db =(new DatabaseHelper(context)).getWritableDatabase();
		}catch(SQLiteException e){
			db =(new DatabaseHelper(context)).getReadableDatabase();
		}
	}

	//SQLiteDatabase 자원정리
	public void Close(){
		db.close();
	}

	//전체 행을 ID의 내림차순으로 호출
	public Cursor fetchAllMemo(){
		return db.query(TABLE_NAME, //테이블명
				PROJECTION, //컬럼명세
				null,		//where 절
				null,		//where 절에 전달될 데이터
				null,		//group by
				null,		//having
				MEMO_ID + " DESC " //order by
				);
	}
	//업데이트
	public void setMemo(String id, String content){

		//업데이트 값 설정
		ContentValues values = new ContentValues();
		//데이터 등록(컬럼명 , 수정할 데이터)
		values.put(MEMO_CONTENT, content);

		//행을 업데이트
		db.update(TABLE_NAME,	//테이블 명
				values,			//수정할 데이터
				MEMO_ID + " = ?",	//where절
				new String[]{ id }	//where절 ?에 전달될 primary key
				);
	}
	//검색
	public String searchMemo(String str){
		//읽을 데이터의 조건
		String where = MEMO_CONTENT+" like ?";
		//where의 ?을 대체할 매개 변수
		String param = str.substring(0,1) + "%";

		//검색
		Cursor c = db.query(
				TABLE_NAME,
				PROJECTION,
				where,	//WHERE
				new String[] { param },	//LIKE
				null,	//GROUP BY
				null,	//HAVING
				MEMO_ID+ " DESC",	//ORDERED BY 새로운 정렬
				"10");	//LIMIT 최대 10개

		StringBuffer buff = new StringBuffer();
		if(c.moveToFirst()){
			//검색 결과를 차례로 꺼내 문자열에 추가
			do{
				long id = c. getLong(ID_INDEX);
				buff.append("id(").append(id).append(") ");

				String memo = c.getString(CONTENT_INDEX);
				buff.append(memo).append("\n");
			}while(c.moveToNext());
		}
		c.close();
		return buff.toString();
	}

	//데이터를 추가하고 추가된 데이터의 primary key(_id)반환
	public String addMemo(String content){
		ContentValues values = new ContentValues();
		values.put(MEMO_CONTENT,  content);
		long id =db.insert(TABLE_NAME, MEMO_CONTENT, values);
		if(id < 0){
			return "";
		}
		return Long.toString(id);
	}

	//지정된 ID의 행삭제
	public void deleteMemo(String id){
		db.delete(TABLE_NAME, //테이블명
				MEMO_ID + " = ?", //where절
				new String[] { id } //where절 ? 에 전달될 데이터
				);
	}

	/*=-=-=--=-=-=-=-=-=SQLiteOPenHelper를 상속받아 구현한 클래스=-=-=-=-=-=-=-=-*/

	public class DatabaseHelper extends SQLiteOpenHelper{

		public DatabaseHelper(Context context){
			super(context, DB_NAME, null, 1);
		}

		//데이터 베이스를 새로 만든 다음 호출
		public void onCreate(SQLiteDatabase db){
			//내부에 테이블 만들기
			db.execSQL(CREATE_TABLE);
		}
		//존재하는 데이터 베이스로 정의하고 있는 버전이 다를때 super(context, DB_NAME, null, 1); -> 2
		public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
			Log.w(TAG,"Version mismatch : "+oldVersion+" to "+newVersion);
			//여기에서는 테이블을 삭제하고 새로 작성함
			//일반적으로 테이블의 데이터 변환을 수행
			db.execSQL(DROP_TABLE);
			onCreate(db);
		}
	}
}

res / values/string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, SQLiteDemo!</string>
    <!-- 응용 프로그램 이름 -->
    <string name="app_name">SQLiteDemo</string>

<!-- 등록된 메모가없는 경우에 대한 설명 -->
<string name="no_memo">메모가없습니다</string>

<!-- 버튼의 표시 문자열 -->
<string name="delete_label">삭제</string>
<string name="modify_label">변경</string>
<string name="add_label">추가</string>

<!-- ID 편집 텍스트 상자에 표시되는 팁 -->
<string name="id_label">ID</string>

</resources>


res/ layout/ main.xml 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <!-- ID 문자열 표시(수정/삭제시 해당 primary key 표시) -->
        <TextView
            android:id="@+id/view_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="@string/id_label"
            android:width="50dp" />

        <!-- 데이터 입력 (등록/수정/삭제) -->

        <EditText
            android:id="@+id/edit_memo"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
                        
            />
    </LinearLayout>
    <!-- 등록/수정 삭제 버튼 -->

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/delete_button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/delete_label" />

        <Button
            android:id="@+id/modify_button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/modify_label" />

        <Button
            android:id="@+id/add_button"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/add_label" />
    </LinearLayout>

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:choiceMode="singleChoice" />
    <!-- ListView에 표시할 데이터가 없을 때 아래 위젯이 보여짐 -->
    <TextView
        android:id="@android:id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/no_memo" />

</LinearLayout>


res/ layout/ memo_row.xml 
<?xml version="1.0" encoding="utf-8"?>
<!-- memo_row.xml -->
<!-- 목록보기 1 줄에 배치 -->
<LinearLayout

   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
  <!-- ID가 표시되는 텍스트 뷰 -->
  <TextView
     android:id="@+id/_id"
     android:layout_width="50dp" 
     android:layout_height="wrap_content" />
  <!-- 메모보기 텍스트 뷰 -->
  <TextView
     android:id="@+id/memo_text"
     android:padding="5px"
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" />
</LinearLayout>




db파일 생성 여부 확인방법은


DDMS 진입후


data > data > 자신의 패키지명 > databases > 파일 저장 해서 보려면은 바로 이 이미지 위에 디스켓 모양이 있는데 파일 선택후 그것을 클릭하면 됩니다.










터치 밀어내서 화면 전환 입니다(스마트폰 배경화면 화면이랑 비슷)






첨부파일 (구글에서 배포하는 파일)


files.zip



 

xml파일은 res 폴더에 anim 폴더 생성후 파일을 붙여넣기 하면 됩니다


이미지 파일은 보는 폴더와 같이 하면 됩니다



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ViewFlipper
        android:id="@+id/flipper"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>


package kr.android.flipper.touch;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;

public class FlipperTouch extends Activity implements View.OnTouchListener {
	ViewFlipper flipper;

	// 터치 이벤트 발생 지점의 x좌표 저장
	float down_x;
	float up_x;
	int[] imageItems;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		imageItems = new int[] { R.drawable.image01, R.drawable.image02,
				R.drawable.image03 };
		flipper = (ViewFlipper) findViewById(R.id.flipper);

		for (int i : imageItems) {
			ImageView image = new ImageView(this);
			image.setImageResource(i);
			flipper.addView(image, new ViewGroup.LayoutParams(
					ViewGroup.LayoutParams.FILL_PARENT,
					ViewGroup.LayoutParams.FILL_PARENT));
		}
		flipper.setOnTouchListener(this);

	}

	public boolean onTouch(View v, MotionEvent event) {
		// 터치 이벤트가 일어난 뷰가 ViewFlipper가 아니면 return
		if (v != flipper)
			return false;

		if (event.getAction() == MotionEvent.ACTION_DOWN) {
			// 터치 시작지점 x좌표 저장
			down_x = event.getX();
		} else if (event.getAction() == MotionEvent.ACTION_UP) {
			// 터치 끝난 지점 X좌표 저장
			up_x = event.getX();

			if (up_x < down_x) {
				// 터치 할때 왼쪽방향으로 진행
				flipper.setInAnimation(AnimationUtils.loadAnimation(this,
						R.anim.push_left_in));

				flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
						R.anim.push_left_out));

				flipper.showNext();
			} else if (up_x > down_x) {
				// 터치할때 오른쪽 방향으로 진행
				flipper.setInAnimation(AnimationUtils.loadAnimation(this,
						R.anim.push_right_in));
				flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
						R.anim.push_right_out));
				flipper.showPrevious();
			}
		}
		return true;
	}
}


'Android > 기본' 카테고리의 다른 글

Xml 가져오기 (날씨)  (0) 2012.04.28
SQLite 연동하기  (1) 2012.04.28
ListIcon (ListView에 아이콘,버튼)  (0) 2012.04.28
News Service 주기적으로 데이터 가지고 오기  (0) 2012.04.28
SMSReceiver (BroadcastReceiver사용)  (0) 2012.04.28
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>


widget_icontext.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" 
	android:layout_height="60px"
	android:padding="5px">
	<ImageView 
	    android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:id="@+id/img"
		android:layout_alignParentLeft="true" />
	<TextView 
	    android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:id="@+id/text"
		android:textColor="#00ff00" 
		android:textSize="30sp"
		android:layout_toRightOf="@id/img" />
	<Button android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:id="@+id/btn"
		android:layout_alignParentRight="true" 
		android:text="주문" />
</RelativeLayout>



package kr.android.list.icon;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListIconTest extends Activity {
	ArrayList<myitem> arItem;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		arItem = new ArrayList<myitem>();
		MyItem mi;
		mi = new MyItem(R.drawable.ic_launcher, "삼성 노트북");
		arItem.add(mi);
		mi = new MyItem(R.drawable.ic_launcher, "LG 세탁기");
		arItem.add(mi);
		mi = new MyItem(R.drawable.ic_launcher, "대우 마티즈");
		arItem.add(mi);

		MyListAdapter myAdapter = new MyListAdapter(this,
				R.layout.widget_icontext, arItem);

		ListView myList;
		myList = (ListView) findViewById(R.id.list);
		myList.setAdapter(myAdapter);
	}
}

// 리스트 뷰에 출력할 항목
class MyItem {
	int icon;
	String name;

	MyItem(int icon, String name) {
		this.icon = icon;
		this.name = name;
	}
}

// 어댑터 클래스
class MyListAdapter extends BaseAdapter {
	Context maincon;
	LayoutInflater inflater;
	ArrayList<myitem> arSrc;
	int layout;

	public MyListAdapter(Context context, int alayout, ArrayList<myitem> aarSrc) {
		maincon = context;
		arSrc = aarSrc;
		layout = alayout;
		// ListView에서 사용한 View를 정의한 xml 를 읽어오기 위해
		// LayoutInfalater 객체를 생성
		inflater = LayoutInflater.from(maincon);
	}

	public int getCount() {
		return arSrc.size();
	}

	public Object getItem(int position) {
		return arSrc.get(position).name;
	}

	public long getItemId(int position) {
		return position;
	}

	// 각 항목의 뷰 생성
	public View getView(int position, View convertView, ViewGroup parent) {
		final int pos = position;
		if (convertView == null) {
			convertView = inflater.inflate(layout, parent, false);
		}
		ImageView img = (ImageView) convertView.findViewById(R.id.img);
		img.setImageResource(arSrc.get(position).icon);

		TextView txt = (TextView) convertView.findViewById(R.id.text);
		txt.setText(arSrc.get(position).name);

		Button btn = (Button) convertView.findViewById(R.id.btn);
		btn.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				String str = arSrc.get(pos).name + "를 주문합니다.";
				Toast.makeText(maincon, str, Toast.LENGTH_SHORT).show();
			}
		});
		return convertView;
	}
}



'Android > 기본' 카테고리의 다른 글

SQLite 연동하기  (1) 2012.04.28
터치해서 화면 전환 Flipper Touch  (0) 2012.04.28
News Service 주기적으로 데이터 가지고 오기  (0) 2012.04.28
SMSReceiver (BroadcastReceiver사용)  (0) 2012.04.28
Notify 알림 메세지  (0) 2012.04.28

manifest.xml 서비스 등록 방법




Service



해당 class 클릭후 저장



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button
	android:id="@+id/newsstart"  
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:text="뉴스 서비스 시작"
	/>
<Button
	android:id="@+id/newsend"  
	android:layout_width="wrap_content" 
	android:layout_height="wrap_content" 
	android:text="뉴스 서비스 종료"
	/>
</LinearLayout>


package kr.android.news.service;
//주기적으로 데이터 가지고오기
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class NewsDemo extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		Button btnstart = (Button)findViewById(R.id.newsstart);
		btnstart.setOnClickListener(new Button.OnClickListener(){
			public void onClick(View v) {
				Intent intent = new Intent(NewsDemo.this,NewsService.class);
				//서비스 실행
				startService(intent);
			}
		});
		
		Button btnend = (Button)findViewById(R.id.newsend);
		btnend.setOnClickListener(new Button.OnClickListener(){
			public void onClick(View v){
				Intent intent = new Intent(NewsDemo.this, NewsService.class);
				//서비스 종료
				stopService(intent);
			}
		});
	}
}


package kr.android.news.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
import android.os.Bundle;
import android.os.Message;
import android.os.Handler;

public class NewsService extends Service{
	boolean mQuit;

	public void onDestroy(){
		super.onDestroy();

		Toast.makeText(this, "Service End",4000).show();

		//run() for 문 빠져나오기 위함
		mQuit = true;
	}

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	@Override
	public void onStart(Intent intent, int startId){
		super.onStart(intent, startId);
		NewsThread thread  = new NewsThread();
		thread.start();
	}

	class NewsThread extends Thread {
		String[] arNews = {
				"일본 , 독도는 한국땅으로 인정",
				"번데기 맛 쵸코파이 출시",
				"춘천 지역에 초거대 유전 발견",
				"한국 월드컵 결승 진출",
				"국민 소득 6만불 돌파",
				"학교 폭력 완전 근절된 것으로 조사 되지 않음",
				"안드로이드 점유율 아이폰을 앞 질렀다",
		};
		public void run(){
			for(int idx = 0; mQuit == false; idx++){
				Message msg = new Message();

				Bundle bundle = new Bundle();
										//랜덤으로 나오기 위한
				bundle.putString("news",arNews[idx % arNews.length]);
				msg.setData(bundle);
				mHandler.sendMessage(msg);
				try{
					Thread.sleep(7000);
				}catch (Exception e){
					e.printStackTrace();
				}
			}
		}
	}

	Handler mHandler = new Handler() {
		public void handleMessage(Message msg){
			String news = msg.getData().getString("news");
			Toast.makeText(NewsService.this,news,4000).show();
		}
	};
}



'Android > 기본' 카테고리의 다른 글

터치해서 화면 전환 Flipper Touch  (0) 2012.04.28
ListIcon (ListView에 아이콘,버튼)  (0) 2012.04.28
SMSReceiver (BroadcastReceiver사용)  (0) 2012.04.28
Notify 알림 메세지  (0) 2012.04.28
전화걸기2 Contact Provider  (0) 2012.04.28



생성시 Activity를 생성하지 않습니다



안에 클래스가 없는걸 확인할 수 있습니다




manifest.xml 확인



두개의 클래스 생성

NotificationMessage는 Activity를 상속합니다(extends Activity)

SMSReceiver 는BroadcastReceiver를 상속합니다(extends BroadcastReceiver)




Activity manifest.xml 등록방법은 이전게시물에 설명을 많이 했기 때문에 생략합니다(위에 Activity누르고 등록해주면됨)


SMSReceiver  리시버 등록합니다




추가가 된 모습


코드 모습



누르고 다시 add



Intent Filter




 add 클릭



Action 



SMS_RECEIVED



저장


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kr.android.sms.receiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity android:name="NotificationMessage"></activity>
        <receiver android:name="SMSReceiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>


package kr.android.sms.receiver;

import android.app.Activity;
import android.app.NotificationManager;
import android.os.Bundle;
import android.widget.TextView;

public class NotificationMessage extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.main);

		TextView text = (TextView) findViewById(R.id.text);

		NotificationManager manager = (NotificationManager) 
				getSystemService(NOTIFICATION_SERVICE);

		manager.cancel(1234);

		text.setText("메세지 정상 수신");
	}
}
package kr.android.sms.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver {
	private static final int NOTIFY_ID = 1234;

	@Override
	public void onReceive(Context context, Intent intent) {
		Bundle bundle = intent.getExtras();
		SmsMessage[] smsMgs = null;
		String str = "";
		String address = "";
		if (bundle != null) {

			// PDU : sms 메세지의 산업 포맷
			Object[] pdus = (Object[]) bundle.get("pdus");

			// 가져온 Object(pdu)만큼 SmsMessage객체 생성
			smsMgs = new SmsMessage[pdus.length];
			
			for (int i = 0; i < smsMgs.length; i++) {
				//Object 배열 (pdu)에 담겨있는 메세지를 byte[]로 캐스팅하여 smsMessage에 담음
				smsMgs[i] = SmsMessage.createFromPdu((byte[]) (pdus[i]));

				// 전화번호 추출
				address += smsMgs[i].getOriginatingAddress();

				// 메세지 추출
				str += smsMgs[i].getMessageBody();
				str += "\n";
			}
			Toast.makeText(context, address + ":" + str, Toast.LENGTH_LONG)
			.show();

			// Notification status bar에 등록
			addNotificationStatusBar(context, address, str);
		}
	}

	public void addNotificationStatusBar(Context context, String address,
			String message) {

		// 1. NotificationManager 얻기
		NotificationManager nm = (NotificationManager) context
				.getSystemService(Context.NOTIFICATION_SERVICE);

		// 2. Notification 객체 생성
		Notification noti = new Notification(R.drawable.ic_launcher,
				address	+ " : " + message,
				System.currentTimeMillis());

		Intent i = new Intent(context, NotificationMessage.class);

		PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, i,
				0);

		noti.setLatestEventInfo(context, address, message, pendingIntent);

		nm.notify(NOTIFY_ID, noti);
	}
}


Uses Permission 지정해 줘야함


manifest.xml 접근 ->Permission ->  add



클릭



저장




실행화면


'Android > 기본' 카테고리의 다른 글

ListIcon (ListView에 아이콘,버튼)  (0) 2012.04.28
News Service 주기적으로 데이터 가지고 오기  (0) 2012.04.28
Notify 알림 메세지  (0) 2012.04.28
전화걸기2 Contact Provider  (0) 2012.04.28
안드로이드 전화걸기  (0) 2012.04.28
AndroidManifest.xml  : Activity 클래스 등록
권한설정 : android.permission.RECEIVE_SMS
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/notify"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="클릭하면 5초 후에 알림 메시지가 전달됩니다." />
    <Button
        android:id="@+id/cancel"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:text="알림 메세지를 중단합니다." />

</LinearLayout>


package kr.android.notify;

//알림 메세지
import android.app.Activity;
import android.os.Bundle;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import java.util.Timer;
import java.util.TimerTask;

public class NotifyDemo extends Activity {
	private static final int NOTIFY_ME_ID = 1337;// 식별하기 위한
	private Timer timer = new Timer();// 스레드 응용
	private int count = 0; // 카운팅하기 위한

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		Button btn = (Button) findViewById(R.id.notify);

		btn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				TimerTask task = new TimerTask() {
					public void run() {
						notifyMe();
					}
				};
				// 위에 문장(TimerTask)먼저 실행되지 않고 지금 이문장이 실행되면서 task를 5초 뒤에 실행
				timer.schedule(task, 5000);
			}
		});

		btn = (Button) findViewById(R.id.cancel);

		btn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				NotificationManager mgr = (NotificationManager)
						getSystemService(NOTIFICATION_SERVICE);

				mgr.cancel(NOTIFY_ME_ID);
			}
		});
	}

	private void notifyMe() {
		final NotificationManager mgr = (NotificationManager)
				getSystemService(NOTIFICATION_SERVICE);
		
		Notification note = new Notification(R.drawable.red_ball, "알림 메시지!",
				System.currentTimeMillis());
		
		/*=-=-=-=-=-=-=전달인자=-=-=-=-=-=-=-=-
		Context context : 실행중인  Activity 객체
		int requestCode : 현재 사용되지 않음
		Intent intent : 실행시킬 Activity 정보를 가지고 있는 Intent객체
		<int flags="">
		FLAG_CANCEL_CURRENT : 이전에 생성한 PendingIntent는 취소 새롭게 생성
		FLAG_NO_CREATE : 현재 생성된 PendingIntent 반환
		FLAG_ONE_SHOT : 생성된 PendingIntent는 단 한번만 사용가능
		FLAG_UPDATA_CURRENT: 이미 생성된 PendingIntent가 있다면 Intent의 내용 변경
		=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
		Activity 가 아닐경우에는 PendingIntent 를 사용*/
		PendingIntent i = PendingIntent.getActivity(this, 0, 
				new Intent(this,NotifyMessage.class), 0);

		note.setLatestEventInfo(this, "알림 제목", "알림 메세지 본문입니다.", i);

		//카운트는 초기화 되지 않아서 제거한뒤 다시 추가하여도 그전에 숫자까지 카운팅됨
		note.number = ++count;

		mgr.notify(NOTIFY_ME_ID, note);
	}
}


package kr.android.notify;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class NotifyMessage extends Activity{
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);


		TextView txt = new TextView(this);

		txt.setText("알림 메세지!");
		setContentView(txt);

	}
}


DDMS에 접근해서


전화번호와 문자입력(한글은 안됨)





알림메세지가 기존과 다르게 나타남



AndroidManifest.xml 에 접근해서 Application에 Activity를 등록해 줘야 합니다(권한 게시물 참고)

나중에 브로드캐스트 리시버에 사용하기 위한(?) 초기단계


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	>
	<Button android:id="@+id/pick"
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent"
		android:layout_weight="1"
		android:text="선택"
	/>
	<Button android:id="@+id/view"
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent"
		android:layout_weight="1"
		android:text="보기"
	/>
</LinearLayout>


package kr.android.intent4;
//컨택트 프로바이더 사용
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.widget.Button;

public class ContactDemo extends Activity {
	Button viewButton = null;
	Uri contact = null;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		Button btn= (Button)findViewById(R.id.pick);

		btn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				Intent i = new Intent(Intent.ACTION_PICK,
						Uri.parse("content://contacts/people"));
				startActivity(i);

			}
		});
		viewButton = (Button)findViewById(R.id.view);

		viewButton.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				startActivity(new Intent(Intent.ACTION_VIEW,
						Uri.parse("content://contacts/people/1")));
			}
		});
	}
}




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="전화번호" />

        <EditText
            android:id="@+id/number"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:cursorVisible="true"
            android:editable="true"
            android:singleLine="true" />
    </LinearLayout>

    <Button
        android:id="@+id/dial"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="전화 걸기" />

</LinearLayout>


package kr.android.intent3;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class DialerDemo extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        final EditText number = (EditText)findViewById(R.id.number);
        Button dial= (Button)findViewById(R.id.dial);
        
        dial.setOnClickListener(new Button.OnClickListener(){
			public void onClick(View v) {
				String toDial ="tel:"+number.getText().toString();
        		startActivity(new Intent(Intent.ACTION_DIAL,Uri.parse(toDial)));
			}
        });
    }
}




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	>
	<TableLayout
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content"
		android:stretchColumns="1,2"
	>
		<TableRow>
			<TextView
				android:layout_width="wrap_content" 
				android:layout_height="wrap_content"
				android:paddingLeft="2dip"
				android:paddingRight="4dip"
				android:text="위도 경도:"
			/>
			<EditText android:id="@+id/lat"
				android:layout_width="fill_parent" 
				android:layout_height="wrap_content"
				android:cursorVisible="true"
				android:editable="true"
				android:singleLine="true"
				android:layout_weight="1"
			/>
			<EditText android:id="@+id/lon"
				android:layout_width="fill_parent" 
				android:layout_height="wrap_content"
				android:cursorVisible="true"
				android:editable="true"
				android:singleLine="true"
				android:layout_weight="1"
			/>
		</TableRow>
	</TableLayout>
	<Button android:id="@+id/map"
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content"
		android:text="지도 보기!"
	/>
</LinearLayout>


package kr.android.intent2;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.widget.Button;

public class LaunchDemo extends Activity {
	private EditText lat;
	private EditText lon;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		Button btn = (Button)findViewById(R.id.map);
		lat = (EditText)findViewById(R.id.lat);
		lon = (EditText)findViewById(R.id.lon);

		btn.setOnClickListener(new View.OnClickListener(){
			public void onClick(View view){
				String _lat=lat.getText().toString();
				String _lon=lon.getText().toString();

				Uri uri = Uri.parse("geo:"+_lat+","+_lon);

				startActivity(new Intent(Intent.ACTION_VIEW,uri));
			}
		});
	}
}




'Android > 기본' 카테고리의 다른 글

전화걸기2 Contact Provider  (0) 2012.04.28
안드로이드 전화걸기  (0) 2012.04.28
Intent 사용하여 화면 이동  (0) 2012.04.28
구글맵에 마커 표시하기(위치 지정)  (0) 2012.04.28
구글맵 사용하기  (0) 2012.04.28
(manifest.xml 에서 application activity 추가해줘야됨) 




  main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="이동" />
    <Button
        android:id="@+id/button02"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="데이터를 갖고 이동" />

</LinearLayout>


main_two.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>


manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kr.android.intent.msg"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".IntentMsg"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="IntentTwo"></activity>
    </application>

</manifest>


package kr.android.intent.msg;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class IntentMsg extends Activity implements View.OnClickListener{
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		Button button = (Button)findViewById(R.id.button01);
		Button button2 = (Button)findViewById(R.id.button02);

		button.setOnClickListener(this);
		button2.setOnClickListener(this);
	}
	public void onClick(View v){
		Intent i = null;
		if(v.getId() == R.id.button01){
			i = new Intent(this,IntentTwo.class);
		}else if(v.getId() == R.id.button02){
			//Intent에 실행시킬 Activity 정보 저장
			i = new Intent(this,IntentTwo.class);
			//실행 시킨 Activity에서 사용할 데이터 셋팅
			//사용할 데이터는 Bundle 객체가 생성된후 그 곳에 보관됨
			i.putExtra("msg", "인텐트로 전달된 데이터");
		}
		//Intent객체가 가지고 있는 Activity 정보를 이용해서 Activity 생성,실행
		startActivity(i);
	}
}


package kr.android.intent.msg;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class IntentTwo extends Activity{
	TextView view;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_two);
		view = (TextView)findViewById(R.id.text);
		view.setText("intentTwo 화면\n");

		Intent i = getIntent();
		if(i.getExtras() == null){
			view.append("데이터 없이 화면 이동");
		}else{
			//Activity 실행시 데이터를 저장했다면 Bundle 객체로 부터 데이터 추출
			Bundle b = i.getExtras();
			String str = b.getString("msg");
			view.append(str);
		}
	}
}






위치기반 서비스 어플리케이션을 만든다면 이 기능은 일반적으로 써야 될겁니다 

                           

사용된 이미지(이미지는 res\mdpi 폴더에 넣으면 됩니다)



기본적으로 manifest에서 apllication -> uses library -> 구글맵 선택( 이전게시물 참고) 해야됩니다




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <com.google.android.maps.MapView
        android:id="@+id/map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:apiKey=""
        android:clickable="true" />

</LinearLayout>


package com.commonsware.android.maps;

import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;

import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.MapView.LayoutParams;

public class NooYawk extends MapActivity {
	MapView map;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		map = (MapView) findViewById(R.id.map);

		// 위도와 경도 정보를 갖는 GeoPoint 객체 생성
		GeoPoint gp = getPoint(40.76793169992044, -73.98180484771729);

		// 위치 (내위치 또는 기준이 되는 위치)를 표시하는 마커를 생성
		MapView.LayoutParams mapParams = new MapView.LayoutParams(
				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, gp,
				MapView.LayoutParams.CENTER);

		ImageView iv = new ImageView(getApplicationContext());
		iv.setImageResource(R.drawable.mymarker);
		map.addView(iv, mapParams);

		// 내위치 또는 기준이 되는 위치를 중심으로 표시되는 아이템
		//        (표시해 주고 싶은 좌표위치 정보(예:관공서)표시
		Drawable marker = getResources().getDrawable(R.drawable.marker);

		marker.setBounds(0, 0, marker.getIntrinsicWidth(),
				marker.getIntrinsicHeight());

		// getOverlays() : 지도위에 오버레이될 아이템을 표시하고 
		//               레이어를 추가하기 위해 레이어 목록 호출
		map.getOverlays().add(new SitesOverlay(marker));

		// 줌 레벨을 제거하는 Controll 표시 여부
		map.setBuiltInZoomControls(true);

		// 지정된 위치 정보를 갖는 지도를 표시
		MapController controller = map.getController();
		controller.setCenter(gp);
		controller.setZoom(17);
	}

	private GeoPoint getPoint(double lat, double lon) {
		return (new GeoPoint((int) (lat * 1000000.0), (int) (lon * 1000000.0)));
	}

	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}

	// ItemizedOverlay : 지도에 보여질 아이템(좌표,제목,간단 설명)의 오버레이 정보처리
	// 각 좌표에 마커를 표시 각 아이템의 스크린 탭( 부가정보 링크)
	// OverlayItem : iItemizedOverlay 클래스에 제공되는 기본 아이템 정보

	private class SitesOverlay extends ItemizedOverlay<overlayitem> {
		private Drawable marker = null;
		private List<overlayitem> items = new ArrayList<overlayitem>();

		public SitesOverlay(Drawable marker) {
			super(marker);
			this.marker = marker;

			items.add(new OverlayItem(getPoint(40.748963847316034,
					-73.96807193756104), "UN", "United Nations"));
			items.add(new OverlayItem(getPoint(40.76866299974387,
					-73.98268461227417), "Lincoln Center",
					"Home of Jazz at Lincoln Center"));
			items.add(new OverlayItem(getPoint(40.765136435316755,
					-73.97989511489868), "Carnegie Hall",
					"Where you go with practice, practice, practice"));
			items.add(new OverlayItem(getPoint(40.70686417491799,
					-74.01572942733765), "The Downtown Club",
					"Original home of the Heisman Trophy"));

			// 생성된 OverlayItem 을 목록으로 지정
			populate();
		}

		// 지정한 번호에 대해 OverlayItem을 return
		@Override
		protected OverlayItem createItem(int i) {
			return items.get(i);
		}

		@Override
		public void draw(Canvas canvas, MapView mapView, boolean shadow) {
			super.draw(canvas, mapView, shadow);
			// 마커의 아래의 중간 부분이 좌표에 위치하도록 지정
			boundCenterBottom(marker);
		}

		@Override
		protected boolean onTap(int i) {
			Toast.makeText(NooYawk.this, items.get(i).getSnippet(),
					Toast.LENGTH_SHORT).show();
			return true;
		}
		//레이어가 처리할 수 있는 항목의 개수를 리턴
		@Override
		public int size() {
			return items.size();
		}
	}
}



manifext.xml 에 Uses Library 셋팅을 해야합니다


Uses Library(manifext -> application)



apiKey는 자신의 apikey를 입력하면 됩니다


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <com.google.android.maps.MapView
        android:id="@+id/map"
        android:clickable="true"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:apiKey="" />

</LinearLayout>


GeoPoint값을 자신이 직접 지정할 위치로 해도 됩니다 이전 게시물 참고
package kr.android.map;

import android.os.Bundle;
import android.widget.ImageView;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MapView.LayoutParams;

public class GoogleMaps extends MapActivity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		MapView mapView = (MapView) findViewById(R.id.map);
		
		//위도, 경도 정보를 갖는 객체 생성
		//위도, 경도는 실수 정보를 갖는데 연산 속도를 높이기 위해서 정수로 변환시켜 처리
		GeoPoint gp = new GeoPoint((int) (27.173095 * 1000000.0),
				(int) (78.04209 * 1000000.0));
		
		//지도에 마커를 표시하기 위해서 LayoutParams 객체 생성
		MapView.LayoutParams mapParams = new MapView.LayoutParams(
				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, gp,
				MapView.LayoutParams.CENTER);
		
		//마커 정보를 갖는 ImageView 객체 생성
		ImageView iv = new ImageView(getApplicationContext());
		iv.setImageResource(R.drawable.marker);
		
		//MapView에 마커 표시를 위해 ImageView와 LayoutParams객체 등록
		mapView.addView(iv, mapParams);
		
		//지정한 위도와 경도를 보여주는 지도를 화면에 출력
		mapView.getController().animateTo(gp);
		
		//줌레벨 지정(배율 1~ 21 )
		mapView.getController().setZoom(16);
		
		//줌 레벨을 조정할 수 있는 Control 사용 여부 셋팅
		mapView.setBuiltInZoomControls(true);

	}
	@Override
	protected boolean isRouteDisplayed() {
		// 사용하지 않음(추상 메소드)
		//두 지점간의 거리 표시를 위한 메소드
		return false;
	}
}




자신의 버젼의 GoogleApis by Google Inc 클릭



동의



새로만들기



새로만든 AVD실행




기능 확인 






밑에서는 자신의 위치 (경도,위도를 뽑아내기 위함입니다)알기 위해서


구글 접속 

좌측 하단 한국 구글 말고 미국 구글로 들어간다.




위에 메뉴에 Maps 클릭


자신이 얻고자 하는 위치 검색후 위치에 오른쪽 마우스 누르고 What's here? 누르면


위도 경도 값이 나옴











CMD 실행( 시작 -> 실행 -> CMD 입력)


cd .android




keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android


CMD 창에 복사하기 위해선 오른쪽 마우스를 누르면 표시가 나옵니다





http://code.google.com/intl/ko/android/maps-api-signup.html




로그인후 api 키를 발급 받으면 됩니다

'Android > 기본' 카테고리의 다른 글

구글맵에 마커 표시하기(위치 지정)  (0) 2012.04.28
구글맵 사용하기  (0) 2012.04.28
SQLite  (0) 2012.04.28
SD CARD (SD 카드에 저장하기)  (0) 2012.04.28
Access Web Image  (0) 2012.04.28



'Android > 기본' 카테고리의 다른 글

구글맵 사용하기  (0) 2012.04.28
이클립스 구글맵 api 설치하기 및 자신의 위치 알아내기(경도,위도)  (0) 2012.04.28
SD CARD (SD 카드에 저장하기)  (0) 2012.04.28
Access Web Image  (0) 2012.04.28
Read JSON  (0) 2012.04.28

+ Recent posts