in MediaRouter/Application/src/main/java/com/example/android/mediarouter/player/MainActivity.java [200:386]
protected void onCreate(Bundle savedInstanceState) {
// Be sure to call the super class.
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mPlayer = (Player) savedInstanceState.getSerializable("mPlayer");
}
// Get the media router service.
mMediaRouter = MediaRouter.getInstance(this);
// Create a route selector for the type of routes that we care about.
mSelector =
new MediaRouteSelector.Builder().addControlCategory(MediaControlIntent
.CATEGORY_LIVE_AUDIO).addControlCategory(MediaControlIntent
.CATEGORY_LIVE_VIDEO).addControlCategory(MediaControlIntent
.CATEGORY_REMOTE_PLAYBACK).addControlCategory(SampleMediaRouteProvider
.CATEGORY_SAMPLE_ROUTE).build();
// Add a fragment to take care of media route discovery.
// This fragment automatically adds or removes a callback whenever the activity
// is started or stopped.
FragmentManager fm = getSupportFragmentManager();
DiscoveryFragment fragment =
(DiscoveryFragment) fm.findFragmentByTag(DISCOVERY_FRAGMENT_TAG);
if (fragment == null) {
fragment = new DiscoveryFragment();
fragment.setCallback(mMediaRouterCB);
fragment.setRouteSelector(mSelector);
fm.beginTransaction().add(fragment, DISCOVERY_FRAGMENT_TAG).commit();
} else {
fragment.setCallback(mMediaRouterCB);
fragment.setRouteSelector(mSelector);
}
// Populate an array adapter with streaming media items.
String[] mediaNames = getResources().getStringArray(R.array.media_names);
String[] mediaUris = getResources().getStringArray(R.array.media_uris);
mLibraryItems = new LibraryAdapter();
for (int i = 0; i < mediaNames.length; i++) {
mLibraryItems.add(new MediaItem(
"[streaming] " + mediaNames[i], Uri.parse(mediaUris[i]), "video/mp4"));
}
// Scan local external storage directory for media files.
File externalDir = Environment.getExternalStorageDirectory();
if (externalDir != null) {
File list[] = externalDir.listFiles();
if (list != null) {
for (int i = 0; i < list.length; i++) {
String filename = list[i].getName();
if (filename.matches(".*\\.(m4v|mp4)")) {
mLibraryItems.add(new MediaItem(
"[local] " + filename, Uri.fromFile(list[i]), "video/mp4"));
}
}
}
}
mPlayListItems = new PlaylistAdapter();
// Initialize the layout.
setContentView(R.layout.sample_media_router);
TabHost tabHost = (TabHost) findViewById(R.id.tabHost);
tabHost.setup();
String tabName = getResources().getString(R.string.library_tab_text);
TabSpec spec1 = tabHost.newTabSpec(tabName);
spec1.setContent(R.id.tab1);
spec1.setIndicator(tabName);
tabName = getResources().getString(R.string.playlist_tab_text);
TabSpec spec2 = tabHost.newTabSpec(tabName);
spec2.setIndicator(tabName);
spec2.setContent(R.id.tab2);
tabName = getResources().getString(R.string.statistics_tab_text);
TabSpec spec3 = tabHost.newTabSpec(tabName);
spec3.setIndicator(tabName);
spec3.setContent(R.id.tab3);
tabHost.addTab(spec1);
tabHost.addTab(spec2);
tabHost.addTab(spec3);
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String arg0) {
updateUi();
}
});
mLibraryView = (ListView) findViewById(R.id.media);
mLibraryView.setAdapter(mLibraryItems);
mLibraryView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
mLibraryView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
updateButtons();
}
});
mPlayListView = (ListView) findViewById(R.id.playlist);
mPlayListView.setAdapter(mPlayListItems);
mPlayListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
mPlayListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
updateButtons();
}
});
mInfoTextView = (TextView) findViewById(R.id.info);
mPauseResumeButton = (ImageButton) findViewById(R.id.pause_resume_button);
mPauseResumeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mPaused = !mPaused;
if (mPaused) {
mSessionManager.pause();
} else {
mSessionManager.resume();
}
}
});
mStopButton = (ImageButton) findViewById(R.id.stop_button);
mStopButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mPaused = false;
mSessionManager.stop();
}
});
mSeekBar = (SeekBar) findViewById(R.id.seekbar);
mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
PlaylistItem item = getCheckedPlaylistItem();
if (fromUser && item != null && item.getDuration() > 0) {
long pos = progress * item.getDuration() / 100;
mSessionManager.seek(item.getItemId(), pos);
item.setPosition(pos);
item.setTimestamp(SystemClock.elapsedRealtime());
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
updateUi();
}
});
// Schedule Ui update
mHandler.postDelayed(mUpdateSeekRunnable, 1000);
// Build the PendingIntent for the remote control client
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mEventReceiver =
new ComponentName(getPackageName(), SampleMediaButtonReceiver.class.getName());
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
mediaButtonIntent.setComponent(mEventReceiver);
mMediaPendingIntent = PendingIntent.getBroadcast(this, 0, mediaButtonIntent, 0);
// Create and register the remote control client
registerRemoteControlClient();
// Set up playback manager and player
mPlayer = Player.create(MainActivity.this, mMediaRouter.getSelectedRoute());
mSessionManager.setPlayer(mPlayer);
mSessionManager.setCallback(new SessionManager.Callback() {
@Override
public void onStatusChanged() {
updateUi();
}
@Override
public void onItemChanged(PlaylistItem item) {
}
});
updateUi();
}