1

どのアクティビティから別のアクティビティにサービスを渡すには?私は曲のリストを表示する音楽プレーヤー(Activity1)を持っていて、それをクリックすると、Activity1内のサービスが開始されます。ユーザーがクリックしてActivity2を開くことができるボタンがあります。サービスを1つのアクティビティから別のアクティビティに移動

私は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 static変数を使用すると、すべての活動でこの変数にアクセス定義することができます。

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); 
    } 
} 
関連する問題