您的位置:首页 > 其它

MediaBrowserService 音乐播放项目

2015-12-03 09:33 204 查看
MediaBrowserService 音乐播放项目,本项目主要有如下功能:

(1):支持播放在线音乐

(2):按住home键退出页面后显示通知栏部分播放提示,

(3) : 支持切换上下首歌曲

本项目来自:https://github.com/googlesamples/android-MediaBrowserService

首先配置如下服务:

<service

android:name=".service.MusicService"

android:exported="true">

<intent-filter>

<action android:name="android.media.browse.MediaBrowserService" />

</intent-filter>

</service>

主要代码如下:

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 be 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;

}

}

}

运行效果:



效果源码:http://www.itlanbao.com/code/20151123/10000/100656.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: