Mediabrowserservice Music Playback project, this project mainly has the following functions:
(1): Support playing music online
(2): Press the home button to exit the page and display the notification bar part of the playback prompt,
(3): Support to toggle the top and bottom songs
This project from: Https://github.com/googlesamples/android-MediaBrowserService
First configure the following services:
<service
Android:name= ". Service. Musicservice "
Android:exported= "true" >
<intent-filter>
<action android:name= "Android.media.browse.MediaBrowserService"/>
</intent-filter>
</service>
The main code is as follows:
public class Browsefragment extends Fragment {
private static final String TAG = Loghelper.makelogtag (BrowseFragment.class.getSimpleName ());
public static final String arg_media_id = "media_id";
public static interface Fragmentdatahelper {
void onmediaitemselected (Mediabrowser.mediaitem item);
}
The MediaID to is used for subscribing for children using the mediabrowser.
Private String Mmediaid;
Private MediaBrowser Mmediabrowser;
Private Browseadapter Mbrowseradapter;
Private Mediabrowser.subscriptioncallback Msubscriptioncallback = new Mediabrowser.subscriptioncallback () {
@Override
public void onchildrenloaded (String ParentID, list<mediabrowser.mediaitem> children) {
mbrowseradapter.clear ();
mbrowseradapter.notifydatasetinvalidated ();
for (Mediabrowser.mediaitem Item:children) {
Mbrowseradapter.add (item);
}
mbrowseradapter.notifydatasetchanged ();
}
@Override
public void OnError (String id) {
Toast.maketext (Getactivity (), R.string.error_loading_media,
Toast.length_long). Show ();
}
};
Private Mediabrowser.connectioncallback Mconnectioncallback =
New Mediabrowser.connectioncallback () {
@Override
public void onconnected () {
LOGHELPER.D (TAG, "onconnected:session token" + mmediabrowser.getsessiontoken ());
if (Mmediaid = = null) {
Mmediaid = Mmediabrowser.getroot ();
}
Mmediabrowser.subscribe (Mmediaid, msubscriptioncallback);
if (mmediabrowser.getsessiontoken () = = null) {
throw new IllegalArgumentException ("No Session token");
}
Mediacontroller Mediacontroller = new Mediacontroller (getactivity (),
Mmediabrowser.getsessiontoken ());
Getactivity (). Setmediacontroller (Mediacontroller);
}
@Override
public void onconnectionfailed () {
LOGHELPER.D (TAG, "onconnectionfailed");
}
@Override
public void onconnectionsuspended () {
LOGHELPER.D (TAG, "onconnectionsuspended");
Getactivity (). Setmediacontroller (NULL);
}
};
public static browsefragment newinstance (String mediaid) {
Bundle args = new bundle ();
Args.putstring (arg_media_id, MediaID);
Browsefragment fragment = new Browsefragment ();
Fragment.setarguments (args);
return fragment;
}
@Override
Public View Oncreateview (layoutinflater inflater, ViewGroup container,
Bundle savedinstancestate) {
View Rootview = inflater.inflate (R.layout.fragment_list, container, false);
Mbrowseradapter = new Browseadapter (getactivity ());
View controls = Rootview.findviewbyid (R.id.controls);
Controls.setvisibility (View.gone);
ListView ListView = (ListView) Rootview.findviewbyid (R.id.list_view);
Listview.setadapter (Mbrowseradapter);
Listview.setonitemclicklistener (New Adapterview.onitemclicklistener () {
@Override
public void Onitemclick (adapterview<?> parent, view view, int position, long ID) {
Mediabrowser.mediaitem item = mbrowseradapter.getitem (position);
try {
Fragmentdatahelper listener = (fragmentdatahelper) getactivity ();
listener.onmediaitemselected (item);
} catch (ClassCastException ex) {
LOG.E (TAG, "Exception trying to cast to Fragmentdatahelper", ex);
}
}
});
Bundle args = Getarguments ();
Mmediaid = args.getstring (arg_media_id, NULL);
Mmediabrowser = new MediaBrowser (getactivity (),
New ComponentName (Getactivity (), Musicservice.class),
Mconnectioncallback, NULL);
return rootview;
}
@Override
public void OnStart () {
Super.onstart ();
Mmediabrowser.connect ();
}
@Override
public void OnStop () {
Super.onstop ();
Mmediabrowser.disconnect ();
}
An adapter for showing the list of browsed Mediaitem ' s
private static class Browseadapter extends Arrayadapter<mediabrowser.mediaitem> {
Public Browseadapter (Context context) {
Super (context, R.layout.media_list_item, New arraylist<mediabrowser.mediaitem> ());
}
Static Class Viewholder {
ImageView Mimageview;
TextView Mtitleview;
TextView Mdescriptionview;
}
@Override
Public View GetView (int position, View Convertview, ViewGroup parent) {
Viewholder Holder;
if (Convertview = = null) {
Convertview = Layoutinflater.from (GetContext ())
. Inflate (R.layout.media_list_item, parent, false);
Holder = new Viewholder ();
Holder.mimageview = (ImageView) Convertview.findviewbyid (R.ID.PLAY_EQ);
Holder.mImageView.setVisibility (View.gone);
Holder.mtitleview = (TextView) Convertview.findviewbyid (r.id.title);
Holder.mdescriptionview = (TextView) Convertview.findviewbyid (r.id.description);
Convertview.settag (holder);
} else {
Holder = (viewholder) convertview.gettag ();
}
Mediabrowser.mediaitem item = getItem (position);
Holder.mTitleView.setText (Item.getdescription (). GetTitle ());
Holder.mDescriptionView.setText (Item.getdescription (). GetDescription ());
if (item.isplayable ()) {
Holder.mImageView.setImageDrawable (
GetContext (). getdrawable (R.DRAWABLE.IC_PLAY_ARROW_WHITE_24DP));
Holder.mImageView.setVisibility (view.visible);
}
return convertview;
}
}
}
Operating effect:
: http://www.itlanbao.com/code/20151123/10000/100656.html
Related code
Mediabrowserservice Music Playback Project
Very simple but cool particle crushing effect
A good ordering software
Android a nice picture viewing effect
Dragtosortimage album loading and picture dragging
Copy-Pull recording video
A cool load loading effect
Recyclerview loading different view implementation effects
Super Cool Time selection control
Nice Time-axis
Mediabrowserservice Music Playback Project