1

하나의 활동에서 다른 활동으로 서비스를 전달하는 방법은 무엇입니까? 음악 목록을 표시하는 음악 플레이어 (Activity1)가 있으며이를 클릭하면 Activity1 내에서 서비스가 시작됩니다. 사용자가 클릭하여 Activity2를 열 수있는 버튼이 있습니다.서비스 전달 하나의 활동에서 다른 활동으로

그래서 Activity1에서 Activity2로 서비스를 전달하는 가장 좋은 방법은 무엇입니까? 서비스가 Activity1에서 시작되면 Activity2가 계속 재생됩니다. 서비스가 Activity1에서 시작되지 않은 경우, Activity2는 서비스를 사용하기 전에 서비스를 시작해야합니다.

감사합니다.

다음은 몇 가지 샘플 코드입니다. MusicService는 서비스 클래스를 확장하는 클래스입니다.

public class Activity1 extends AppCompatActivity { 

private MusicService serviceMusic; 

private ServiceConnection musicConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     MusicService.PlayerBinder binder = (MusicService.PlayerBinder) service; 
     //get service 
     serviceMusic = binder.getService(); 
     serviceMusic.setSongList(songList); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 

    } 
}; 

}

답변

3

당신은 응용 프로그램이 클래스를 확장하고이 클래스에서 공공 정적 변수를 사용하여 모든 활동이 변수에 액세스 정의 할 수 있습니다. 이 같은

:

public class G extends Aplication{ 
    public static MusicService serviceMusic; 
} 

및 매니페스트 :

<application ... 
    android:name=".G"> 

지금 액세스 할 수있는 G.serviceMusic있는 곳.

+0

같은 서비스를 사용하는 여러 활동을 가지고 있기 때문에, 기본 활동은 다음과 같이 작성해야 이 작품, 고마워요. – Julia

3

가 나는 바인드 서비스 대신 패스정적 글로벌 서비스에 더 나은 것 같아요. 이 같은 서브 클래스 활동을 구현할 수있는 그런

public abstract class BasicServiceActivity extends AppCompatActivity { 
    protected DvrService mDvrService; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_basic); 
     attachService(); 
    } 

    @Override 
    protected void onDestroy() { 
     detachService(); 
     super.onDestroy(); 
    } 

    private ServiceConnection mServiceConnection = new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName name, IBinder binder) { 
      DvrService.DvrServiceBinder serviceBinder = (DvrService.DvrServiceBinder) binder; 
      mDvrService = serviceBinder.getService(); 
      onServiceAttached(mDvrService); 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      mDvrService = null; 
     } 
    }; 

    private void attachService() { 
     Intent service = new Intent(this, DvrService.class); 
     bindService(service, mServiceConnection, Service.BIND_AUTO_CREATE); 
    } 

    private void detachService() { 
     unbindService(mServiceConnection); 
    } 

    /** Callback when service attached. */ 
    protected void onServiceAttached(DvrService service) { 
     // do something necessary by its subclass. 
    } 
} 

BasicServiceActivity.java :

public class ServiceActivity extends BasicServiceActivity { 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startService(new Intent(this, DvrService.class)); 
    } 

    @Override 
    protected void onDestroy() { 
     if (mDvrService != null) { 
      mDvrService.removeListener1(mListener1); 
     } 
     super.onDestroy(); 
    } 

    @Override 
    protected void onServiceAttached(DvrService service) { 
     // do your stuff, for example add a listener. 
     service.addListener1(mListener1); 
    } 
}