마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

새로 생성한 클래스에서 startService가 안되는 경우 (소스첨부)

0 추천

안녕하세요.

타이머가 작동할 때, 서비스를 호출하려고 합니다.

타이머는 CounterDown라는 클래스로 구현하였습니다.

 

원래 mainactivity  에서는 startservice 메소드를 사용한 서비스시작이 잘 되었습니다만,

타이머 작동시 가능하게 하려고, 타이머 클래스내에서 startservice메소드가 에러가 나는데 이유를 모르겠습니다. ㅠㅠ

소스 첨부합니다..

 

1. CounterDown.java

public class CounterDown extends CountDownTimer{
	 
    public CounterDown(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

     @Override
    public void onTick(long millisUntilFinished) //타이머가 실행되는 동안 수행
    {
   startService(new Intent(this, SimpleService.class));
   
    }
    

	@Override
    public void onFinish()//타이머가 끝날 때 수행 
    {
		stopService(new Intent(this, SimpleService.class));

    }
  }

 

2. 메인 액티비티 (SimpleServiceActivity)


public class SimpleServiceActivity extends Activity implements OnClickListener{
	private Button startServiceButton;
	EditText setLocktime;
	Button timerStart;
	
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        startServiceButton = (Button)findViewById(R.id.startService);
        setLocktime = (EditText)findViewById(R.id.setLockTime);
        timerStart = (Button)findViewById(R.id.timerStart);
        
       startServiceButton.setOnClickListener(this);
        timerStart.setOnClickListener(this);       
    }
    
	@Override
	public void onClick(View v) {
		switch(v.getId()){
case R.id.startService:
startService(new Intent(this, SimpleService.class));
break;

case R.id.timerStart: String timestr; timestr = setLocktime.getText().toString(); 
int time = Integer.parseInt(timestr); 
final CounterDown timer = new CounterDown (time*1000, 1000); timer.start(); } } }
익명사용자 님이 2014년 5월 2일 질문
2014년 5월 5일 수정

1개의 답변

0 추천
 
채택된 답변
startService(new Intent(this, SimpleService.class)); 해당 부분을 보시면 this, 즉 자신을 호출하는 것을 볼 수 있는데요.

그렇게 되면 Application Context가 들어가게되는데, 새롭게 구현한 부분에서는 Application Context를 못 찾아서 문제가 발생하는 것이 아닌가 싶습니다.
인연 (31,880 포인트) 님이 2014년 5월 3일 답변
답변 감사드립니다.. 그럼 Application Context를 찾기 위해서 어떻게 수정해주어야 하나요 ?!

startService(new Intent(context, SimpleService.class));
startService(new Intent(SimpleServiceActivity.this, SimpleService.class));

이렇게 수정해도 에러가 나네요..

알려주시면 감사하겠습니다..!
Context를 Activity의 Context를 인자로 받아 사용해보세요.
...