您好我的Code有问题。我想在后台播放音乐,这将与Android的IntentService
一起使用。
但是如果我实现这条线,我的SDk会给我一个错误。
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();
}
}
如果您需要更多代码,请说出来!
答案 0 :(得分:6)
错误是因为您在this
中使用onClickListener
,并且必须在其中使用ClassName.this
。根据{{3}}回答,这是因为:
您在使用时创建匿名内部类 这部分代码:new 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));