1

Wie gebe ich einen Service von einer Aktivität zu einer anderen? Ich habe einen Musikplayer (Activity1), der eine Liste von Songs anzeigt, und wenn Sie darauf klicken, wird der Service innerhalb von Activity1 gestartet. Ich habe eine Schaltfläche, auf die Benutzer klicken können, um Activity2 zu öffnen.Pass Service von einer Aktivität zur anderen

Also, was ist der beste Weg für mich, den Dienst von Activity1 zu Activity2 zu übergeben. Wenn der Dienst in Activity1 gestartet wird, sollte Activity2 weiterhin abgespielt werden. Wenn der Dienst in Activity1 nicht gestartet wurde, sollte Activity2 den Dienst vor der Verwendung starten.

Danke.

Hier ist ein Beispielcode, der MusicService ist eine Klasse, die die Serviceklasse erweitert.

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) { 

    } 
}; 

}

Antwort

3

können Sie Application erweitern Klasse definieren und öffentliche statische Variable in dieser Klasse verwenden und diese Variable in alle Aktivitäten zugreifen.

wie folgt aus:

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

und in manifest:

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

Jetzt können Sie Zugriff auf G.serviceMusic, wo jeder.

+0

Das funktioniert, danke. – Julia

3

denke ich, es besser zu binden Service wäre statt Pass ein statischer globaler Service. Da Sie mehrere Aktivitäten haben, die den gleichen Dienst verwenden, sollte eine Basisaktivität wie folgt erstellt werden:

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

Dann können Sie Unterklasse Aktivität wie folgt implementieren:

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); 
    } 
} 
Verwandte Themen