2014-01-06 54 views
-1

您好,我的代碼存在問題。我想在後臺播放音樂,並且這將與Android的IntentService一起使用。 但我的SDK給我一個錯誤,如果我執行該行。Android意圖服務錯誤

Radio.java

public class Radio extends Activity implements OnCompletionListener, 
OnPreparedListener, OnErrorListener, OnBufferingUpdateListener, MusicFocusable, ViewFactory { 

....

play.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View btn) { 
      if (!playState) { 
       play.setImageResource(R.drawable.stop); 
       handler.postDelayed(handlePlayRequest, 300); 

       startService(new Intent(this, MyService.class)); 
       "Here is Error 1" 

      } 
      else { 
       play.setImageResource(R.drawable.play); 
       status.setText("Drücke Play!"); 
       handler.postDelayed(handlePlayRequest, 300); 

       stopService(new Intent(this, MyService.class)); 
       "Here is Error 2" 

      } 
     } 

MyService.java

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

public class MyService extends Service { 
private static final String TAG = "MyService"; 
MediaPlayer player; 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onCreate() { 
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onCreate"); 

} 

@Override 
public void onDestroy() { 
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onDestroy"); 
    player.stop(); 
} 

@Override 
public void onStart(Intent intent, int startid) { 
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); 
    Log.d(TAG, "onStart"); 
    player.start(); 
} 
} 

如果你需要更多的代碼只是說了吧!

+3

發佈錯誤和相關的logcats啓動 – turbo

回答

6

錯誤是因爲您在onClickListener中使用this,您必須在其中使用ClassName.this。據this的答案,這是因爲:

當您使用 你的代碼,這部分你正在創建一個匿名內部類:新OnClickListener(){

這意味着該類你引用不再是this,因此要訪問/標識您必須使用類名稱的類。所以,你應該這樣做:

play.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View btn) { 
     if (!playState) { 
      play.setImageResource(R.drawable.stop); 
      handler.postDelayed(handlePlayRequest, 300); 

      startService(new Intent(Radio.this, MyService.class)); 
     } 
     else { 
      play.setImageResource(R.drawable.play); 
      status.setText("Drücke Play!"); 
      handler.postDelayed(handlePlayRequest, 300); 

      stopService(new Intent(Radio.this, MyService.class)); 
     } 
    } 
} 

此外,您還可以使用btn.getContext()代替Classname.this,使代碼更容易複製到其他類。這看起來像這樣:

startService(new Intent(btn.getContext(), MyService.class));