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

можно определить Application расширить класс и использовать общественную статическую переменную в этом классе и получить доступ к этой переменной во всей деятельности.

так:

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

и в манифесте:

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

Теперь вы можете получить доступ к G.serviceMusic где-либо.

+0

Это работает, спасибо. – Julia

3

Я думаю, что было бы лучше связывать служб вместо проходастатической глобальной службы. Поскольку у вас есть несколько видов деятельности, которые будут использовать ту же услугу, базовая деятельность должна быть создана так:

BasicServiceActivity.java

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. 
    } 
} 

Затем вы можете реализовать подкласс активности, как это:

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); 
    } 
} 
Смежные вопросы