-1

Mainactivity가 fragmentActivity (관련이 있는지 확실하지 않음)를 확장하고 배경 음악을 잘 재생합니다. 활동을 나가면 음악이 멈추길 바래요. 나는 아래의 코드를 최소화했다. 액티비티의 onPause() 라이프 사이클에 널 포인트 예외가 발생합니다.fragmentActivity에서 배경 음악 재생을 중지하는 방법

public class MainActivitytest extends FragmentActivity implements 
    ActionBar.TabListener{ 

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 int myShuffledSize; 
private Context context; 
public static final String PREFS_NAME = "MyPrefsFile"; 
public MediaPlayer player; 


@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 onResume() { 
    super.onResume(); 
    MediaPlayer player = MediaPlayer.create(MainActivitytest.this, R.raw.bgmusic3); 
    player.setLooping(true); 
    player.setVolume(100, 100); 
    player.start(); 

} 
public void onPause(){ 
    super.onPause(); 
    //player.stop(); //causes null pointer exception 
} 
+1

닫힌 [어제의 질문] (https://stackoverflow.com/questions/41587155/starting-a-3rd-activity-setting-up-interfaces-and-listeners)과 마찬가지로 문제는 발생하지 않았습니다. Android 활동 라이프 사이클 이해. 아직 활동에 대한 공식 문서를 읽었습니까 (닫힌 질문에서 제안)? 단지 인터넷의 예를 복사하여 붙여 넣기 만하면되는 개념을 이해하지 않고 인터넷에서 붙여 넣기 만하면됩니다. 활동 라이프 사이클을 이해하고 [mcve]를 게시하십시오. 그렇지 않으면 질문이 주제와 관련이 없으며 downvoted 경향이 있습니다. –

+0

@DavidRawson 공유 한 링크를 읽고 봤습니다. 내가 배운 것을 통해 나는 파편이 활동 클래스의 생명주기에 붙는다는 것이 문제라고 생각한다. 이제 더 자세히 b/c 방법을 묻는다면 플레이어가 onPause (활동 및 단편)에서 멈추도록 노력했지만 여전히 null 예외 오류가 계속 발생합니다. 어떤 라이프 사이클 (활동 또는 조각 또는 둘 다)에서 나는 플레이어가 멈추라는 명령을 내려야합니까? 주제를 벗어나려는 것이 아니라 올바른 질문을하는 법을 모르겠다. –

+1

동영상에서 알게되어 정말 좋습니다. 이제 귀하가 언급 한 정보를 포함하도록 질문을 편집하십시오. 따라서 플레이어는 [여기, 예를 들어 라이프 사이클]에서 멈추고 있습니다. onStart()] 또는 [lifecycle here]에서 [nullpointerexception]을 얻고 있습니다. 그렇게하면 모든 코드를 읽을 필요없이 사람들이 문제를 빨리 진단 할 수 있습니다. –

답변

0

나는 더 많은 연구를 한 후, 내가 배웠던 것을 새로운 것으로 배웠습니다. 여기에 내가

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> 

이도 내 조각보기에서 작동 매니페스트

에 포함합니다. 나는 오늘 많은 것을 배웠다. 희망이 나를 좋아하는 다른 사람을 도와줍니다.

+0

문제를 직접 해결할 수 있습니다! –