You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
5.0 KiB
139 lines
5.0 KiB
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
Copyright 2013 The Android Open Source Project
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
<sample>
|
|
<name>MediaBrowserService</name>
|
|
<group>Media</group>
|
|
<package>com.example.android.mediasession</package>
|
|
|
|
<minSdk>19</minSdk>
|
|
<auto_add_support_lib>true</auto_add_support_lib>
|
|
<use_java8>true</use_java8>
|
|
|
|
<!-- Include additional dependencies here.-->
|
|
<dependency>com.android.support:appcompat-v7:26.1.0</dependency>
|
|
<dependency>com.android.support.constraint:constraint-layout:1.0.2</dependency>
|
|
|
|
<strings>
|
|
<intro>
|
|
<![CDATA[ This sample is DEPRECATED. ]]>
|
|
</intro>
|
|
</strings>
|
|
|
|
<!-- The basic templates have already been enabled. Uncomment more as desired. -->
|
|
<template src="base-build" />
|
|
<template src="base-application" />
|
|
|
|
<metadata>
|
|
<status>DEPRECATED</status>
|
|
<categories>Media</categories>
|
|
<technologies>Android</technologies>
|
|
<languages>Java</languages>
|
|
<solutions>Mobile</solutions>
|
|
<level>ADVANCED</level>
|
|
<icon>screenshots/icon-web.png</icon>
|
|
<screenshots>
|
|
<img>screenshots/1-main.png</img>
|
|
<img>screenshots/2-notification.png</img>
|
|
</screenshots>
|
|
<api_refs>
|
|
<android>android.support.v4.media.MediaBrowserServiceCompat</android>
|
|
<android>android.support.v4.media.MediaBrowserCompat</android>
|
|
<android>android.support.v4.media.session.MediaSessionCompat</android>
|
|
<android>android.support.v4.media.session.MediaControllerCompat</android>
|
|
<android>android.support.v4.media.app.NotificationCompat.MediaStyle</android>
|
|
</api_refs>
|
|
<description>
|
|
<
|
|
sample for a more complete solution for using a MediaSession and MediaBrowserService.
|
|
|
|
This sample shows how to implement a media app that allows
|
|
background playback of audio, and provide a media library
|
|
that is exposed to other apps.
|
|
1. It allows other apps control media playback externally
|
|
using MediaSession. This allows playback to be controlled by
|
|
the Google Assistant, for example.
|
|
2. It exposes a simple music library through MediaBrowserService.
|
|
And it provides MediaSession callbacks. This allows it to be used
|
|
by Android Auto, for example.
|
|
When not connected to a car, the app has a very simple UI that
|
|
allows for playback as well as skip to previous and next tracks.
|
|
To learn more about MediaSession and MediaBrowserService, read
|
|
this [article on Medium](https://medium.com/google-developers/understanding-mediasession-part-4-4-dcc77c535f99)
|
|
that goes into the architectural details of these APIs.
|
|
|
|
<img src="screenshots/architecture.png" height="400" alt="Architecture Diagram"/>
|
|
]]></description>
|
|
<intro>
|
|
<![CDATA[
|
|
To implement a MediaBrowserService, you need to:
|
|
|
|
- Extend MediaBrowserServiceCompat, implementing the media
|
|
browsing related methods onGetRoot and onLoadChildren;
|
|
|
|
- In onCreate, start a new MediaSession and call super.setSessionToken() with
|
|
this MediaSession's token;
|
|
|
|
- Set a MediaSession.Callback class on the MediaSession. The callback class
|
|
will receive all the user's actions, like play, pause, etc;
|
|
|
|
- Handle all the actual music playing using any method your app prefers
|
|
(for example, the Android MediaPlayer class)
|
|
|
|
- Whenever it changes, update info about the playing item and the playing
|
|
queue using MediaSession corresponding methods (setMetadata,
|
|
setPlaybackState, setQueue, setQueueTitle, etc)
|
|
|
|
- Handle AudioManager focus change events and react appropriately
|
|
(e.g. pause when audio focus is lost)
|
|
|
|
|
|
To make it compatible with Android Auto, you also need to:
|
|
|
|
- Declare a meta-data tag in AndroidManifest.xml linking to a xml resource
|
|
with a automotiveApp root element. For a media app, this must include
|
|
an <uses name="media"/> element as a child.
|
|
|
|
For example, in AndroidManifest.xml:
|
|
```
|
|
<meta-data android:name="com.google.android.gms.car.application"
|
|
android:resource="@xml/automotive_app_desc"/>
|
|
```
|
|
|
|
And in res/xml/automotive\_app\_desc.xml:
|
|
```
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<automotiveApp>
|
|
<uses name="media"/>
|
|
</automotiveApp>
|
|
```
|
|
|
|
- Declare and export the service in AndroidManifest.xml:
|
|
```
|
|
<service
|
|
android:name=".service.MusicService"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.media.browse.MediaBrowserService" />
|
|
</intent-filter>
|
|
</service>
|
|
```
|
|
]]></intro>
|
|
</metadata>
|
|
</sample>
|