经过更多的研究,我完成了我想要的服务,我学到了一些新东西。下面是我用
public class MainActivitytest extends FragmentActivity implements
ActionBar.TabListener {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
public final static String MUSIC_BACKGROUND = "com.example.myfirstapp.MESSAGE";
private String[] tabs = {"Colors and Shapes", "Letters and Numbers", "CVC and Sight Words", "Adjectives", "Simple Sentences", "Reading Comprehension"};
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
private Context context;
public static final String PREFS_NAME = "MyPrefsFile";
private boolean mIsBound = false;
private MusicService mServ;
private ServiceConnection Scon =new ServiceConnection(){
public void onServiceConnected(ComponentName name, IBinder
binder) {
mServ = ((MusicService.ServiceBinder)binder).getService();
}
public void onServiceDisconnected(ComponentName name) {
mServ = null;
}
};
void doBindService(){
bindService(new Intent(this,MusicService.class),
Scon,Context.BIND_AUTO_CREATE);
mIsBound = true;
}
void doUnbindService()
{
if(mIsBound)
{
unbindService(Scon);
mIsBound = false;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Intent intent = new Intent(this, MusicService.class);
startService(intent);
new SetupViews().invoke(); //setup fragment views
}
public void onPause(){
super.onPause();
Intent intent = new Intent(this, MusicService.class);
stopService(intent);
代码现在我的服务类
package info.androidhive.tabsswipe;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;
public class MusicService extends Service implements MediaPlayer.OnErrorListener {
private final IBinder mBinder = new ServiceBinder();
MediaPlayer mPlayer;
private int length = 0;
public MusicService() {
}
public class ServiceBinder extends Binder {
public MusicService getService() {
return MusicService.this;
}
}
@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
mPlayer = MediaPlayer.create(this, R.raw.bgmusic3);
mPlayer.setOnErrorListener(this);
if (mPlayer != null) {
mPlayer.setLooping(true);
mPlayer.setVolume(100, 100);
}
mPlayer.setOnErrorListener(new OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int
extra) {
onError(mPlayer, what, extra);
return true;
}
});
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mPlayer.start();
return START_STICKY;
}
public void pauseMusic() {
if (mPlayer.isPlaying()) {
mPlayer.pause();
length = mPlayer.getCurrentPosition();
}
}
public void resumeMusic() {
if (mPlayer.isPlaying() == false) {
mPlayer.seekTo(length);
mPlayer.start();
}
}
public void stopMusic() {
mPlayer.stop();
mPlayer.release();
mPlayer = null;
}
@Override
public void onDestroy() {
super.onDestroy();
if (mPlayer != null) {
try {
mPlayer.stop();
mPlayer.release();
} finally {
mPlayer = null;
}
}
}
public boolean onError(MediaPlayer mp, int what, int extra) {
Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show();
if (mPlayer != null) {
try {
mPlayer.stop();
mPlayer.release();
} finally {
mPlayer = null;
}
}
return false;
}
}
在清单
<service android:name=".MusicService" />
<activity
android:name="info.androidhive.tabsswipe.MainActivitytest"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
这个工程即使在我的局部视图包含这一点。今天我学到了很多。希望这可以帮助像我这样的其他人。
像你的[来自昨天的问题](https://stackoverflow.com/questions/41587155/starting-a-3rd-activity-setting-up-interfaces-and-listeners)被关闭,问题是从没有了解Android Activity生命周期。你是否阅读过官方文件(在封闭问题中建议)?您不应该期望只从互联网上复制和粘贴示例,而不理解背后的概念。请花一些时间了解活动生命周期并发布[mcve],否则问题不在话题之列,并且往往会被低估 –
@DavidRawson我已阅读并观看了您分享的链接。用我学到的东西,我认为可能是片段被附加到活动类的生命周期。现在,如果我可以问你如何进一步研究b/cI,试图让玩家停在onPause(activity和fragment)上,但我仍然得到一个空的异常错误。在什么生命周期(活动或片段或两者)我应该把玩家停止的命令?我不是故意脱离主题,也许我只是不知道如何提出正确的问题。 –
你从视频中学到的很棒。现在编辑您的问题,以包含您提到的信息。所以,玩家停止在[例如这里的生命周期。 onStart()]或者,我在[lifecycle here]中获得[nullpointerexception]。如果你这样做,它可以让人们更容易快速诊断问题,而无需通读所有代码 –