經過更多的研究,我完成了我想要的服務,我學到了一些新東西。下面是我用
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]。如果你這樣做,它可以讓人們更容易快速診斷問題,而無需通讀所有代碼 –