Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.name.mediabrowsertest
- import android.Manifest
- import android.content.ComponentName
- import android.content.Context
- import android.content.pm.PackageManager
- import android.content.res.Configuration
- import android.media.AudioManager
- import android.media.MediaDataSource
- import android.media.session.MediaController
- import android.os.Build
- import android.support.v7.app.AppCompatActivity
- import android.os.Bundle
- import android.provider.MediaStore
- import android.support.annotation.RequiresApi
- import android.support.v4.app.ActivityCompat
- import android.support.v4.content.ContextCompat
- import android.support.v4.media.MediaBrowserCompat
- import android.support.v4.media.MediaBrowserServiceCompat
- import android.support.v4.media.MediaMetadataCompat
- import android.support.v4.media.session.MediaControllerCompat
- import android.support.v4.media.session.PlaybackStateCompat
- import android.util.Log
- import android.view.View
- import android.widget.ImageView
- class MainActivity : AppCompatActivity() {
- private lateinit var mMediaBrowser: MediaBrowserCompat
- fun buildTransportControls(){
- mMediaBrowser.subscribe(mMediaBrowser.root,object: MediaBrowserCompat.SubscriptionCallback(){})
- //mMediaBrowser.getItem("")
- Log.i("EXTRAS",mMediaBrowser.extras.toString())
- var mPlayPause = findViewById<ImageView>(R.id.imageView)
- //Attach listen to button
- mPlayPause.setOnClickListener(object: View.OnClickListener {
- override fun onClick(v : View ){
- var pbSate = MediaControllerCompat.getMediaController(this@MainActivity).playbackState.playbackState
- if(pbSate == PlaybackStateCompat.STATE_PLAYING){
- Log.i("1","11111")
- MediaControllerCompat.getMediaController(this@MainActivity).transportControls.pause()
- }else{
- Log.i("1","22222")
- MediaControllerCompat.getMediaController(this@MainActivity).transportControls.playFromMediaId("Böug",null)
- MediaControllerCompat.getMediaController(this@MainActivity).transportControls.play()
- //MediaControllerCompat.getMediaController(this@MainActivity).transportControls.playFromMediaId()
- }
- }
- })
- var mediaController = MediaControllerCompat.getMediaController(this@MainActivity)
- //Show Init state
- var metadat = mediaController.metadata
- var pbState = mediaController.playbackState
- //Register Callback to stay synced
- mediaController.registerCallback(controllerCallback)
- }
- val controllerCallback = object : MediaControllerCompat.Callback() {
- override fun onMetadataChanged(metadat:MediaMetadataCompat){
- Log.i("Musik",metadat.toString())
- }
- override fun onPlaybackStateChanged(state :PlaybackStateCompat){}
- }
- private val mConnectionCallbacks = object : MediaBrowserCompat.ConnectionCallback() {
- override fun onConnected() {
- Log.i("Connection","Connecting")
- // Get the token for the MediaSession
- val token = mMediaBrowser.sessionToken
- // Create a MediaControllerCompat
- val mediaController = MediaControllerCompat(this@MainActivity,token)
- // Save the controller
- MediaControllerCompat.setMediaController(this@MainActivity, mediaController)
- // Finish building the UI
- buildTransportControls()
- }
- override fun onConnectionSuspended() {
- // The Service has crashed. Disable transport controls until it automatically reconnects
- Log.i("ERROR","Connection Suspended")
- }
- override fun onConnectionFailed() {
- // The Service has refused our connection
- Log.i("ERROR","Connection Failed")
- }
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- Log.i("Hello World","Hello")
- permissionRequest()
- if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
- //Create MediaBrowser Service
- mMediaBrowser = MediaBrowserCompat(this,
- ComponentName(this, MediaPlaybackService::class.java),
- mConnectionCallbacks,
- null)
- }
- Log.i("Hello World","Hello2")
- }
- override fun onStart() {
- super.onStart()
- mMediaBrowser.connect()
- }
- override fun onResume() {
- super.onResume()
- volumeControlStream = AudioManager.STREAM_MUSIC
- }
- override fun onStop() {
- super.onStop()
- if(MediaControllerCompat.getMediaController(this@MainActivity) != null){
- MediaControllerCompat.getMediaController(this@MainActivity).unregisterCallback(controllerCallback)
- }
- mMediaBrowser.disconnect()
- }
- fun permissionRequest(){
- val permissions = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
- if(permissions != PackageManager.PERMISSION_GRANTED){
- ActivityCompat.requestPermissions(this, arrayOf(
- Manifest.permission.READ_EXTERNAL_STORAGE
- ),101)
- }
- }
- }
- package com.name.mediabrowsertest
- import android.media.MediaDescription
- import android.media.MediaMetadata
- import android.media.browse.MediaBrowser
- import android.media.session.MediaSession
- import android.os.Build
- import android.os.Bundle
- import android.provider.MediaStore
- import android.support.annotation.RequiresApi
- import android.support.v4.media.MediaBrowserCompat
- import android.support.v4.media.MediaBrowserServiceCompat
- import android.support.v4.media.MediaDescriptionCompat
- import android.support.v4.media.MediaMetadataCompat
- import android.support.v4.media.session.MediaSessionCompat
- import android.support.v4.media.session.PlaybackStateCompat
- import android.util.Log
- import com.name.mediabrowsertest.Services.contentcatalogs.MusicLibrary
- class MediaPlaybackService: MediaBrowserServiceCompat(){
- //private val MY_MEDIA_ROOT_ID = "MediaStore.Audio.Media.EXTERNAL_CONTENT_URI"
- private val MY_MEDIA_ROOT_ID ="root"
- private lateinit var mMediaSession: MediaSessionCompat
- private lateinit var mStateBuilder : PlaybackStateCompat.Builder
- private var MySessionCallback =object : MediaSessionCompat.Callback() {
- override fun onPause() {
- super.onPause()
- }
- override fun onPlay() {
- super.onPlay()
- }
- }
- override fun onCreate() {
- super.onCreate()
- //Create the MediaSession
- mMediaSession = MediaSessionCompat(this,"PLAYER")
- //Setting the necessary Flags (Media Buttons)
- mMediaSession.setFlags(
- MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
- //Set an inital PlaybackStatewith ACTION_BUTTONS, so Media buttons can start the player
- mStateBuilder = PlaybackStateCompat.Builder().setActions(
- PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PAUSE)
- //Set our PLaybackState for the MediaSession
- mMediaSession.setPlaybackState(mStateBuilder.build())
- //Handles callbacks from Media Controller MySessionCalback is a PlaeHolder
- mMediaSession.setCallback(MySessionCallback)
- //Set SessionToken so Activites can communicate with it
- sessionToken = mMediaSession.sessionToken
- }
- override fun onLoadChildren(parentId: String, result: Result<MutableList<MediaBrowserCompat.MediaItem>>) {
- var mediaItems:ArrayList<MediaBrowserCompat.MediaItem> = ArrayList()
- var albums = MusicLibrary(this@MediaPlaybackService).getMusic()
- for(item in MusicLibrary.MusicFiles){
- val songList = MediaBrowserCompat.MediaItem(item,
- MediaBrowserCompat.MediaItem.FLAG_PLAYABLE)
- mediaItems.add(songList)
- }
- Log.i("MEDIA_ITEMS",mediaItems.toString())
- result.sendResult(mediaItems)
- }
- override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot? {
- return BrowserRoot(MY_MEDIA_ROOT_ID,null)
- }
- }
- package com.name.mediabrowsertest.Services.contentcatalogs
- import android.annotation.SuppressLint
- import android.content.ContentUris
- import android.content.Context
- import android.database.Cursor
- import android.graphics.drawable.Drawable
- import android.net.Uri
- import android.provider.MediaStore
- import android.support.v4.media.MediaDescriptionCompat
- import android.util.Log
- import com.name.mediabrowsertest.R
- import java.io.FileNotFoundException
- class MusicLibrary(val context: Context) {
- companion object {
- lateinit var albums: ArrayList<String>
- var MusicFiles = arrayListOf<MediaDescriptionCompat>()
- }
- var desc= arrayListOf<MediaDescriptionCompat>()
- var music_Artist = arrayListOf<String>()
- var music_CoverID = arrayListOf<Drawable>()
- var music_Duration = arrayListOf<Int>()
- var album_Title = arrayListOf<String>()
- @SuppressLint("NewApi")
- fun getMusic() {
- val contentResolver = context.contentResolver
- var songUri: Uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
- var songCursor: Cursor = contentResolver.query(songUri, null, null, null, null)
- //Defining the Uri for the Album covers
- val artworkUri = Uri.parse("content://media/external/audio/albumart")
- var albumArtUri: Uri
- var albumDrawable: Drawable
- if (songCursor != null && songCursor.moveToFirst()) {
- //Getting the Position of the stored values
- var albumCoverId: Int = songCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)
- var songDuration = songCursor.getColumnIndex(MediaStore.Audio.Media.DURATION)
- var albumTitle = songCursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM)
- do {
- //Ensure that atleast on Element is in album_Title
- if(!album_Title.isEmpty()) {
- //Test if album is already in array
- if(album_Title.contains(songCursor.getString(albumTitle))) {
- //If album is already in Array skip loop
- continue
- }
- }
- album_Title.add(songCursor.getString(albumTitle))
- //getting the Uri of the Album
- albumArtUri = ContentUris.withAppendedId(artworkUri, songCursor.getLong(albumCoverId))
- //Try to get the Album cover and catch if fail
- try {
- var imageInputStream = context.contentResolver.openInputStream(albumArtUri)
- albumDrawable = Drawable.createFromStream(imageInputStream, albumArtUri.toString())
- } catch (e: FileNotFoundException) {
- albumDrawable = context.getDrawable(R.drawable.baum)
- }
- //Add the Values to the Array
- music_CoverID.add(albumDrawable)
- music_Duration.add((songCursor.getInt(songDuration)) / 1000 * 60)
- //Get Location of File
- var mediaDescriper = MediaDescriptionCompat.Builder().setMediaId(songCursor.getString(albumCoverId)).setTitle(songCursor.getString(albumTitle)).build()
- MusicFiles.add(mediaDescriper)
- Log.i("ALBUMNAMES", album_Title.toString())
- //Go to the next Cursor Position
- } while (songCursor.moveToNext())
- //Copy values to Compainon Object
- albums = album_Title
- Log.i("MUSICLIBRARY",MusicFiles.toString())
- }
- }
- }
Add Comment
Please, Sign In to add comment