Step 7: The Out-of-Band streaming runs from Content Source to Content Receiver
A.4. Code Snippet: Provider’s MR and Controller’s MR are playing
/***************************************
** see{@link ♯caseRemoteIsPlayingLocalIsStopped_resume
**(Context, ControlPoint, String, String)}
********************************************************/ private static void caseRemoteIsPlayingLocalIsPlaying(final Context context,
final ControlPoint ctrlp,
final String remoteUdn,final String localUdn){ //user decides what to do
String mUri;
String mUriMetaData;
//check whether the preference settings is set
SharedPreferences remote_play_local_play_pref= PreferenceManager .getDefaultSharedPreferences(context);
String mPref;
mPref= remote_play_local_play_pref.getString(“remote_play_local_play",“");
if((!mPref.equals(“"))&&(!mPref.equals(context.getResources().
getStringArray(R.array.recommendActionOptions2)[0]))){
//Preference was set and it is not up to the user option String[] actOpts= context.getResources().
getStringArray(R.array.recommendActionOptions);
if(mPref.equals(actOpts[0])){ //Stop me and playto remote
//first stop remote one
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
caseRemoteIsStoppedLocalIsPlaying_replay(context, ctrlp, remoteUdn, localUdn);
action= UtilDlna.getActionByName(ctrlp, “Stop", localUdn);
mFlag= avt.actionStop(action);
}else if(mPref.equals(actOpts[1])){
//Stop me and resume on remote //first stop remote one
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
caseRemoteIsStoppedLocalIsPlaying_resume(context, ctrlp, remoteUdn, localUdn);
action= UtilDlna.getActionByName(ctrlp, “Stop", localUdn);
mFlag= avt.actionStop(action);
A.4 Code Snippet: Provider’s MR and Controller’s MR are playing 125
}else if(mPref.equals(actOpts[2])){
//Stop remote one and replay on me
caseRemoteIsPlayingLocalIsStopped_replay(context, ctrlp, remoteUdn, localUdn);
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
}else if(mPref.equals(actOpts[3])){
//Stop remote one and resume on me
caseRemoteIsPlayingLocalIsStopped_resume(context, ctrlp, remoteUdn, localUdn);
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
}else if(mPref.equals(actOpts[4])){
//Exchange current media content and play over String mLocalUri;
String mLocalUriMetaData;
String mRemoteUriMetaData;
String mRemoteUri;
//get current remote playing medium’s uri
action= UtilDlna.getActionByName(ctrlp, “GetMediaInfo", remoteUdn);
mRemoteUri= avt.actionGetMediaInfo_CurrentURI(action);
//get uri Meta data
mRemoteUriMetaData= avt.actionGetMediaInfo_CurrentURIMetaData(action);
//get current local playing medium’s uri
action= UtilDlna.getActionByName(ctrlp, “GetMediaInfo", localUdn);
mLocalUri= avt.actionGetMediaInfo_CurrentURI(action);
//get uri Meta data
mLocalUriMetaData= avt.actionGetMediaInfo_CurrentURIMetaData(action);
//set local to play
action= UtilDlna.getActionByName(ctrlp, “SetAVTransportURI", localUdn);
mFlag= avt.actionSetAVTransportURI(action, mRemoteUri,mRemoteUriMetaData);
action= UtilDlna.getActionByName(ctrlp, “Play", localUdn);
mFlag= avt.actionPlay(action);
//set remote to play
action= UtilDlna.getActionByName(ctrlp, “SetAVTransportURI", remoteUdn);
mFlag= avt.actionSetAVTransportURI(action, mLocalUri, mLocalUriMetaData);
action= UtilDlna.getActionByName(ctrlp, “Play", remoteUdn);
mFlag= avt.actionPlay(action);
}else if(mPref.equals(actOpts[5])){
//Exchange current playing String mLocalUri;
String mLocalUriMetaData;
String mRemoteUriMetaData;
String mRemoteUri;
String mRemotePosition;
String mLocalPosition;
//get current remote playing medium’s uri
action= UtilDlna.getActionByName(ctrlp, “GetMediaInfo", remoteUdn);
mRemoteUri= avt.actionGetMediaInfo_CurrentURI(action);
//get uri Meta data
mRemoteUriMetaData= avt.actionGetMediaInfo_CurrentURIMetaData(action);
//get remote position
action= UtilDlna.getActionByName(ctrlp, “GetPositionInfo", remoteUdn);
mRemotePosition= avt.actionGetPositionInfo_RelTime(action);
//get current local playing medium’s uri
action= UtilDlna.getActionByName(ctrlp, “GetMediaInfo", localUdn);
mLocalUri= avt.actionGetMediaInfo_CurrentURI(action);
//get uri Meta data
mLocalUriMetaData= avt.actionGetMediaInfo_CurrentURIMetaData(action);
//get current local playing media position
action= UtilDlna.getActionByName(ctrlp, “GetPositionInfo", localUdn);
mLocalPosition= avt.actionGetPositionInfo_RelTime(action);
A.4 Code Snippet: Provider’s MR and Controller’s MR are playing 127
//set local to play
action= UtilDlna.getActionByName(ctrlp, “SetAVTransportURI", localUdn);
mFlag= avt.actionSetAVTransportURI(action, mRemoteUri, mRemoteUriMetaData);
action= UtilDlna.getActionByName(ctrlp, “Play", localUdn);
mFlag= avt.actionPlay(action);
//set remote to play
action= UtilDlna.getActionByName(ctrlp, “SetAVTransportURI", remoteUdn);
mFlag= avt.actionSetAVTransportURI(action, mLocalUri, mLocalUriMetaData);
action= UtilDlna.getActionByName(ctrlp, “Play", remoteUdn);
mFlag= avt.actionPlay(action);
try{
Thread.sleep(3000);
} catch (InterruptedException e) { }
//seek both
action= UtilDlna.getActionByName(ctrlp, “Seek", remoteUdn);
mFlag= avt.actionSeekWithRelTime(action,UtilDlna.getRoughPostion(mLocalPosition));
action= UtilDlna.getActionByName(ctrlp, “Seek", localUdn);
mFlag= avt.actionSeekWithRelTime(action,UtilDlna.getRoughPostion(mRemotePosition));
else{} //stop both
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
action= UtilDlna.getActionByName(ctrlp, “Stop", localUdn);
mFlag= avt.actionStop(action);
} }
else{
//no preference stored or is set to up to user, //ask user to select the option
final Dialog actionSetDialog= new Dialog(context);
actionSetDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
actionSetDialog.setContentView(R.layout.custom_dlg_listview);
actionSetDialog.setCancelable(true);
((TextView)actionSetDialog.findViewById(R.id.TextView02)).setText(“Select Inten-tion");
ArrayAdapter<String> dlgArray = new ArrayAdapter<String>
(context,
R.layout.my_simple_list_item_mutiple_choice_1);
final String[] actOpts= context.getResources().
getStringArray(R.array.recommendActionOptions);
for(int i=0;i<actOpts.length;i++){
dlgArray.add(actOpts[i]);
}
final ListView actDlgll= (ListView)actionSetDialog.
findViewById(R.id.dlg_listview);
public void onClick(View v){
int pos= actDlgll.getCheckedItemPosition();
if(pos != ListView.INVALID_POSITION){
String act= (String)actDlgll.getItemAtPosition(pos);
if(act.equals(actOpts[0])){
//Stop me and playto remote //first stop remote one
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
caseRemoteIsStoppedLocalIsPlaying_replay(context, ctrlp, remoteUdn, localUdn);
action= UtilDlna.getActionByName(ctrlp, “Stop", localUdn);
mFlag= avt.actionStop(action);
}else if(act.equals(actOpts[1])){
//Stop me and resume on remote //first stop remote one
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
caseRemoteIsStoppedLocalIsPlaying_resume(context, ctrlp, remoteUdn, localUdn);
A.4 Code Snippet: Provider’s MR and Controller’s MR are playing 129
action= UtilDlna.getActionByName(ctrlp, “Stop", localUdn);
mFlag= avt.actionStop(action);
}else if(act.equals(actOpts[2])){
//Stop remote one and replay on me
caseRemoteIsPlayingLocalIsStopped_replay(context, ctrlp, remoteUdn, localUdn);
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
}else if(act.equals(actOpts[3])){
//Stop remote one and resume on me
caseRemoteIsPlayingLocalIsStopped_resume(context, ctrlp, remoteUdn, localUdn);
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
}else if(act.equals(actOpts[4])){
//Exchange current media content and play over String mLocalUri;
String mLocalUriMetaData;
String mRemoteUriMetaData;
String mRemoteUri;
//get current remote playing medium’s uri
action= UtilDlna.getActionByName(ctrlp, “GetMediaInfo", remoteUdn);
mRemoteUri= avt.actionGetMediaInfo_CurrentURI(action);
//get uri Meta data
mRemoteUriMetaData= avt.actionGetMediaInfo_CurrentURIMetaData(action);
//get current local playing medium’s uri
action= UtilDlna.getActionByName(ctrlp, “GetMediaInfo", localUdn);
mLocalUri= avt.actionGetMediaInfo_CurrentURI(action);
//get uri Meta data
mLocalUriMetaData= avt.actionGetMediaInfo_CurrentURIMetaData(action);
//set local to play
action= UtilDlna.getActionByName(ctrlp, “SetAVTransportURI", localUdn);
mFlag= avt.actionSetAVTransportURI(action, mRemoteUri,mRemoteUriMetaData);
action= UtilDlna.getActionByName(ctrlp, “Play", localUdn);
mFlag= avt.actionPlay(action);
//set remote to play
action= UtilDlna.getActionByName(ctrlp, “SetAVTransportURI", remoteUdn);
mFlag= avt.actionSetAVTransportURI(action, mLocalUri,mLocalUriMetaData);
action= UtilDlna.getActionByName(ctrlp, “Play", remoteUdn);
mFlag= avt.actionPlay(action);
}else if(act.equals(actOpts[5])){
//Exchange current playing String mLocalUri;
String mLocalUriMetaData;
String mRemoteUriMetaData;
String mRemoteUri;
String mRemotePosition;
String mLocalPosition;
// get current remote playing medium’s uri
action= UtilDlna.getActionByName(ctrlp, “GetMediaInfo", remoteUdn);
mRemoteUri= avt.actionGetMediaInfo_CurrentURI(action);
// get uri Meta data
mRemoteUriMetaData= avt.actionGetMediaInfo_CurrentURIMetaData(action);
//get remote position
action= UtilDlna.getActionByName(ctrlp, “GetPositionInfo", remoteUdn);
mRemotePosition= avt.actionGetPositionInfo_RelTime(action);
//get current local playing medium’s uri
action= UtilDlna.getActionByName(ctrlp, “GetMediaInfo", localUdn);
mLocalUri= avt.actionGetMediaInfo_CurrentURI(action);
//get uri Meta data
mLocalUriMetaData= avt.actionGetMediaInfo_CurrentURIMetaData(action);
//get current local playing media position
A.4 Code Snippet: Provider’s MR and Controller’s MR are playing 131
action= UtilDlna.getActionByName(ctrlp, “Play", localUdn);
mFlag= avt.actionPlay(action);
action= UtilDlna.getActionByName(ctrlp, “Play", remoteUdn);
mFlag= avt.actionPlay(action);
try{
Thread.sleep(3000);
} catch (InterruptedException e) { }
//seek both
action= UtilDlna.getActionByName(ctrlp, “Seek", remoteUdn);
mFlag= avt.actionSeekWithRelTime(action,
UtilDlna.getRoughPostion(mLocalPosition));
action= UtilDlna.getActionByName(ctrlp, “Seek", localUdn);
mFlag= avt.actionSeekWithRelTime(action,
UtilDlna.getRoughPostion(mRemotePosition));
} else{ //stop both
action= UtilDlna.getActionByName(ctrlp, “Stop", remoteUdn);
mFlag= avt.actionStop(action);
action= UtilDlna.getActionByName(ctrlp, “Stop", localUdn);
mFlag= avt.actionStop(action);
} });
actDlgBtn2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){ actionSetDialog.cancel();
}});
actionSetDialog.show();
} }
Table A.2.: Provider as MR and Interactor as MR are playing