2015-09-28 61 views
1
以服务

我做了一个实现MediaPlayer功能的Android应用程序,我知道它的晚,但现在好多了总比不,我想实现一个服务,能够播放媒体时其他应用程序上的multitasking传递一个字符串数组列表,从活动的Android

有没有办法通过例如ArrayListString从活动到service?我发现大约Custom Objects是通过parcelable我认为这是没有必要传递的信息。

例如,如何我开始我的转变:

public class PlayerService extends Service implements MediaPlayer.OnPreparedListener{ 

    private static final String ACTION_PLAY = "action.PLAY"; 
    private static final String ACTION_PAUSE = "action.PAUSE"; 
    private MediaPlayer mediaPlayer = null; 

    @Override 
    public void onCreate() { 
     mediaPlayer = new MediaPlayer(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     if (intent.getAction().equals(ACTION_PLAY)) { 
      try { 
       if(mediaPlayer.isPlaying()) { 
        mediaPlayer.stop(); 
       } 
       mediaPlayer.reset(); 
       mediaPlayer.setDataSource(musicUrl.get(position)); 
       mediaPlayer.setOnPreparedListener(this); 
       mediaPlayer.prepareAsync(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

//   setCurrentSong(myDataList.get(position)); 
//   morphButton.setState(MorphButton.MorphState.START); 
// 
//   setHighlight(myDataList.get(currentPosition)); 
     } 

     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onPrepared(MediaPlayer mp) { 

    } 
} 

正如你所看到的,我需要从ArrayList音乐网址去德MediaPlayer

+1

您可以用'intent.putStringArrayListExtra()'通'的ArrayList()''的String' –

+0

您也可以使用intent.putSerializableExtra()来传递的ArrayList或者任何自定义类实现Serializable – Nanoc

回答

1

在您的活动,准备在那里绑定到服务,您可以通过意向添加ArrayList<String>

ServiceConnection serviceConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) { 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName componentName) { 
    } 
}; 

ArrayList<String> stringList = new ArrayList<>(); 
stringList.add("a"); 
stringList.add("b"); 

Intent i = new Intent(this, BLEDiscoveryService.class); 
i.putStringArrayListExtra("list", stringList); 

bindService(new Intent(this, MyService.class), serviceConnection, BIND_AUTO_CREATE); 

而且在服务的onBind()你可以从传递的意图中检索它。

public class LocalBinder extends Binder { 
    public MyService getService() { 
     return MyService.this; 
    } 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    binder = new LocalBinder(); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    ArrayList<String> stringList = intent.getStringArrayListExtra("list"); 
    return binder; 
} 
相关问题