note

News Service 주기적으로 데이터 가지고 오기 본문

Android/기본

News Service 주기적으로 데이터 가지고 오기

투한 2012. 1. 18. 14:37

manifest.xml 서비스 등록 방법



서비스 




해당 클래스 클릭후 저장




실행 화면





main.xml
<?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>


NewsDemo.java
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);
			}
		});
	}
}


NewsService.java
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();
		}
	};
}