2013-10-15 5 views
1

저는 안드로이드를 매우 신.습니다. 선택한 시간에 모든 소리를 끄는 응용 프로그램을 만들고 싶습니다. 일부 코드가있는 서비스를 만들었고 이클립스에서 오류가 없지만 버튼을 누르면 아무 일도 일어나지 않습니다. 응용 프로그램 관리자에서 내 프로그램과 SilentHours 서비스가 실행중인 것을 볼 수 있습니다. 여기에 내 코드입니다 :안드로이드 서비스가 작동하지 않을 수 있습니다.

MainActivity.java

package com.example.silencecontrol; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    public final static String EXTRA_NAME = "sending silentHour value to service SilenceHours"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    public void setSilenceHours(View view) { 
     EditText editText1 = (EditText)findViewById(R.id.editText1); 
     TextView textView1 = (TextView)findViewById(R.id.textView1); 
     if(editText1.length() > 0) { 
      Intent intent = new Intent(this, SilentHours.class); 
      String editText1String = editText1.getText().toString(); 
      int silentHour = Integer.parseInt(editText1String); 
      intent.putExtra(EXTRA_NAME, silentHour); 
      this.startService(intent); 
     } else { 
      textView1.setText("Please enter the silence hour. "); 
     } 
    } 

} 

SilentHours.java

package com.example.silencecontrol; 

import java.util.Calendar; 

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.media.AudioManager; 
import android.os.IBinder; 

public class SilentHours extends Service { 
    public SilentHours() { 
    } 

    protected void onHandleIntent(Intent intent) { 
     int silentHour = Integer.parseInt(intent.getStringExtra(MainActivity.EXTRA_NAME)); 
     Calendar calendar = Calendar.getInstance(); 
     int currentTime = calendar.get(Calendar.HOUR_OF_DAY); 
     if(currentTime >= silentHour) { 
      AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
      audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0); 
      audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); 
     } 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO: Return the communication channel to the service. 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 
} 

그리고 그런데 나는 onHandleIntent 방법을 @Override 수 없습니다. @Override 주석을 넣으면 오류가 발생합니다.

The method onHandleIntent(Intent) of type SilentHours must override or implement a supertype method.

해당 주석이 필요합니까?

+0

그럼 의도적으로 어떻게 작동할까요?! 나는 onHandleIntent가 단지 한 번만 실행된다는 것을 의미합니다. 호출에 대한 조건은 실패하고 서비스는 아무런 효과없이 실행됩니다 ...! Android AlarmManager를 사용하라는 조언을드립니다. –

+0

@twntee 왜? 내 코드에 무슨 문제가 있습니까? – Salivan

+0

아무 잘못 없습니다. '@ Override '가 의미하는 바를 배우게됩니다. 그것이 중요 할 때! –

답변

0

찾으시는 방법은 onHandleIntent이 아니라 onStartCommand입니다.

아니요,이 주석을 재정의 된 메소드에 추가 할 필요는 없습니다. 수퍼 클래스의 서명을 존중했는지 확인할 수 있기 때문에 매우 좋습니다.

코딩 할 때 IDE에서 도움을 줄 수 있습니다. 간단히 "on"을 입력 한 다음 완료를 요청하여 무시할 수있는 메소드를 확인하십시오.

+0

난 그냥 onHandleIntent를 onStartCommand (intent)로 바꿨지 만 setSilenceHours 메서드를 호출하는 버튼을 누르면 아무 일도 일어나지 않습니다 ... – Salivan

+0

서비스가 호출되는지 기록하십시오. – Snicolas

+0

응용 프로그램 관리자에서 내 서비스가 실행 중이지만 아무 것도 나타나지 않는 것을 볼 수 있습니다. 그냥 실행됩니다 ... 아니면 다른 것을 의미합니까? – Salivan

관련 문제