나는 더 많은 연구를 한 후, 내가 배웠던 것을 새로운 것으로 배웠습니다. 여기에 내가
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 활동 라이프 사이클 이해. 아직 활동에 대한 공식 문서를 읽었습니까 (닫힌 질문에서 제안)? 단지 인터넷의 예를 복사하여 붙여 넣기 만하면되는 개념을 이해하지 않고 인터넷에서 붙여 넣기 만하면됩니다. 활동 라이프 사이클을 이해하고 [mcve]를 게시하십시오. 그렇지 않으면 질문이 주제와 관련이 없으며 downvoted 경향이 있습니다. –
@DavidRawson 공유 한 링크를 읽고 봤습니다. 내가 배운 것을 통해 나는 파편이 활동 클래스의 생명주기에 붙는다는 것이 문제라고 생각한다. 이제 더 자세히 b/c 방법을 묻는다면 플레이어가 onPause (활동 및 단편)에서 멈추도록 노력했지만 여전히 null 예외 오류가 계속 발생합니다. 어떤 라이프 사이클 (활동 또는 조각 또는 둘 다)에서 나는 플레이어가 멈추라는 명령을 내려야합니까? 주제를 벗어나려는 것이 아니라 올바른 질문을하는 법을 모르겠다. –
동영상에서 알게되어 정말 좋습니다. 이제 귀하가 언급 한 정보를 포함하도록 질문을 편집하십시오. 따라서 플레이어는 [여기, 예를 들어 라이프 사이클]에서 멈추고 있습니다. onStart()] 또는 [lifecycle here]에서 [nullpointerexception]을 얻고 있습니다. 그렇게하면 모든 코드를 읽을 필요없이 사람들이 문제를 빨리 진단 할 수 있습니다. –