Android onStartCommand()函数不使用';我好像没接到电话。
我试图实现本视频中的教程,该教程实现了一个在web上传输文件的播放器:但似乎从未调用onStartCommand()函数。在其他地方读到,这可能是因为onCreate()函数没有退出或类似的情况,但不确定我可以用这些信息做什么。当我运行应用程序时,活动将打开,单击“播放”按钮时,不会发生任何事情 为了进行调试,我放置了一个伪toast消息,它在serviceoncreate()中工作,但从未在onStartCommand()或随后调用的任何函数(如onPrepared)中打印任何内容,这让我觉得问题在于onStartCommand没有被调用 为活动和服务输入代码。活动和服务都提到了 活动:Android onStartCommand()函数不使用';我好像没接到电话。,android,service,media-player,android-service,android-mediaplayer,Android,Service,Media Player,Android Service,Android Mediaplayer,我试图实现本视频中的教程,该教程实现了一个在web上传输文件的播放器:但似乎从未调用onStartCommand()函数。在其他地方读到,这可能是因为onCreate()函数没有退出或类似的情况,但不确定我可以用这些信息做什么。当我运行应用程序时,活动将打开,单击“播放”按钮时,不会发生任何事情 为了进行调试,我放置了一个伪toast消息,它在serviceoncreate()中工作,但从未在onStartCommand()或随后调用的任何函数(如onPrepared)中打印任何内容,这让我觉得
package com.example.irfansproject;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class StreamMusic extends Activity implements OnClickListener {
private Button buttonPlayStop;
Intent serviceIntent;
Boolean boolMusicPlaying = false;
String strAudioLink="cairnomount.mp3";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.streammusic);
try{
serviceIntent = new Intent(this,myPlayService.class);
initViews();
buttonPlayStop.setOnClickListener(this);
}catch (Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getClass().getName() + " " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
buttonPlayStop = (Button) findViewById(R.id.bStreamMusic);
}
private void initViews() {
// TODO Auto-generated method stub
buttonPlayStop = (Button) findViewById(R.id.bStreamMusic);
buttonPlayStop.setBackgroundResource(R.drawable.bplay);
}
/*private void setListeners() {
// TODO Auto-generated method stub
}*/
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
buttonPlayStopClick();
}
private void buttonPlayStopClick() {
// TODO Auto-generated method stub
if (!boolMusicPlaying) {
buttonPlayStop.setBackgroundResource(R.drawable.bpause);
playAudio();
boolMusicPlaying = true;
} else {
buttonPlayStop.setBackgroundResource(R.drawable.bplay);
stopAudio();
boolMusicPlaying = false;
}
}
private void stopAudio() {
// TODO Auto-generated method stub
try{
stopService(serviceIntent);
}catch (Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getClass().getName() + " " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
private void playAudio() {
// TODO Auto-generated method stub
serviceIntent.putExtra("sentAudioLink", strAudioLink);
try{
startService(serviceIntent);
}catch (Exception e){
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getClass().getName() + " " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
服务:
package com.example.irfansproject;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnInfoListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnSeekCompleteListener;
import android.os.IBinder;
import android.widget.Toast;
public class myPlayService extends Service implements OnCompletionListener,
OnPreparedListener, OnErrorListener, OnSeekCompleteListener, OnInfoListener, OnBufferingUpdateListener {
private MediaPlayer mediaPlayer = new MediaPlayer();
private String sntAudioLink;
@Override
public void onCreate() {
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnSeekCompleteListener(this);
mediaPlayer.setOnInfoListener(this);
mediaPlayer.reset();
Toast.makeText(this,"poop ",Toast.LENGTH_SHORT).show();
}
public int onSartCommand(Intent intent, int flags, int startId) {
sntAudioLink = intent.getExtras().getString("sentAudioLink");
mediaPlayer.reset();
if (!mediaPlayer.isPlaying()) {
try {
mediaPlayer.setDataSource("http://www.tonycuffe.com/mp3/"+sntAudioLink);
// prepare media player
mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// Start Stick return means service will explicitly continue until user
// ends it
return START_STICKY;
}
public void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
// TODO Auto-generated method stub
}
@Override
public void onSeekComplete(MediaPlayer mp) {
// TODO Auto-generated method stub
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
switch (what) {
case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
Toast.makeText(this,
"Media Error: Not valid for Progressive Playback " + extra,
Toast.LENGTH_SHORT).show();
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
Toast.makeText(this, "Media Error: Server Died!! " + extra,
Toast.LENGTH_SHORT).show();
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
Toast.makeText(this, "Media Error: Unknown " + extra,
Toast.LENGTH_SHORT).show();
}
return false;
}
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
playMedia();
}
private void playMedia() {
// TODO Auto-generated method stub
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
}
}
private void stopMedia() {
// TODO Auto-generated method stub
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
}
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
stopMedia();
stopSelf();
}
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
return false;
}
}您拼错了“开始”
公共int ONSATCOMMAND(Intent Intent、int标志、int startId){
您应该能够添加@Override注释而不会出错。这不是因为您没有在onStartCommand()上设置@Override是吗?logcat中有任何相关错误/消息吗?我在logcat中没有看到任何错误。在onStartCommand上添加@Override注释实际上会导致错误。哇,我觉得自己太傻了,因为犯了这么愚蠢的错误,在这上面花了这么多时间。谢谢Dave!没问题。有时只需要再看一眼就可以了:)