2013-10-15 10 views
0

나는 사운드를 재생할 때이 서비스를 만들었으므로 내가 시도한 것과 거의 다른 간단한 튜토리얼을 따르기 때문에 내가 만든 것을 기반으로 할 수있다. 어쨌든 나는 버튼을 클릭하면이 서비스를 시작해야한다는 것을 내 주요 활동으로 설정했습니다. 서비스가 빌드에 오류가있어서 실행할 수 없습니다. onCreate(); SetContentView 및 FindViewById 행에 오류가 있습니다. 왜 그런 일이 일어나고 있는지를 알고 싶습니다. 그리고 서비스를 사용하여 사운드를 재생하는 올바른 방법이라면 화면이 시간 초과되지 않습니다.안드로이드 서비스가 레이아웃을 정의하지 않음

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.IBinder; 
import android.os.PowerManager; 
import android.util.Log; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.Spinner; 

public class Shipservice extends Service implements View.OnClickListener { 
public static final Integer[] TIME_IN_MINUTES = { 30, 45, 60, 180, 360 }; 
public MediaPlayer mediaPlayer; 
public Handler handler = new Handler(); 
public Button button2; 
public Spinner spinner2; 
public PowerManager.WakeLock wl; 
static final String TAG=Shipservice.class.getSimpleName(); 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
    // TODO Auto-generated method stub 

} 

public void onCreate(Bundle savedInstanceState) { 
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "wake"); 

    super.onCreate(); 
    wl.acquire(); 
    setContentView(R.layout.ship); 
    button2 = (Button) findViewById(R.id.btn2); 
    button2.setOnClickListener(this); 
    spinner2 = (Spinner) findViewById(R.id.spinner2); 
    ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, 
      android.R.layout.simple_spinner_item, TIME_IN_MINUTES); 

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner2.setAdapter(adapter); 
    Log.d(TAG, "onCreate'd"); 
} 
// Play the sound and start the timer 
private void playSound(int resourceId) { 
    // Cleanup any previous sound files 
    cleanup(); 
    // Create a new media player instance and start it 

    mediaPlayer = MediaPlayer.create(this, resourceId); 
    mediaPlayer.start(); 
    // Create the timer to stop the sound after x number of milliseconds 
    int selectedTime = TIME_IN_MINUTES[spinner2.getSelectedItemPosition()]; 
    handler.postDelayed(runnable, selectedTime * 60 * 1000); 
} 

// Handle button callback 
@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.btn2: 
     playSound(R.raw.ocean_ship); 
     break; 
    } 
} 

@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    cleanup(); 
    super.onDestroy(); 
    Log.d(TAG, "onDestroy'd"); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    super.onStart(intent, startId); 
    Log.d(TAG, "onStart'd"); 
} 

public void cleanup() { 
    if (mediaPlayer != null) { 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
     mediaPlayer = null; 

    } 
    // Cancel any previously running tasks 
    handler.removeCallbacks(runnable); 
} 

// Runnable task used by the handler to stop the sound 
public Runnable runnable = new Runnable() { 
    public void run() { 
     cleanup(); 
    } 
}; 


protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
    wl.release(); 
} 

} 
+0

어디에서 오류가 발생했는지 말씀해 주시겠습니까? 사람들이 프로젝트를 시작하고 코드를 복사하여 기대하는 바를 알기를 기대하는 것은 무리입니다., – Codeman

+0

오류가 무엇인지 물어 봅니다. Pls 귀하의 게시물을 수정뿐만 아니라 오류를 추가합니다. – prijupaul

+0

서비스에 대한 레이아웃을 확장 할 수 있습니까? 지금까지 서비스가 UI를 가지고 있지 않다는 것을 알고 있습니다. onCreate()에서 setContentView (Layout)을 할 수있는 UI가 있습니다. –

답변

0

서비스에는 사용자 인터페이스가 없습니다! 사용자와 상호 작용하는 액티비티를 만들고 그것을 주석의 질문에 대한 응답으로 startService (의도)를 통해


을 서비스에 요청을 전달했다 :

이 IntentService에서 파생 된 새 클래스를 만듭니다. 해당 클래스에서 onHandleIntent (Intent intent) 메서드를 구현하십시오. Manifest 파일에 새 서비스의 선언을 추가하십시오.

응용 프로그램 : 사용자가 소리를 재생해야하는 작업을 수행하는 경우 : 새 서비스를 명시 적으로 참조하는 인 텐트를 만듭니다. (서비스의 의도 필드에 사용할 수도 있음) 서비스에 인 텐트를 보내기 위해 startService (인 텐트) 메소드를 호출하십시오.

서비스로 이동해야하는 기능은 무엇입니까? 기본적으로 서비스에 몇 밀리 초 이상 걸리는 모든 것이 있어야합니다.

많은 예제가 있습니다. IntentService와 같은 것으로 Google에서 소리를 재생하여 찾을 수 있습니다.

+0

설정 내용보기에서 오류를 설명합니다. 따라서 기본적으로 사운드를 재생하고 UI가있는 활동이 있지만 대신 소리 재생을 처리하는 서비스가 필요하다고 들었습니다. 어떻게 나눠야합니까? – user2869238