Guest User

Untitled

a guest
Aug 29th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.69 KB | None | 0 0
  1. package com.name.mediabrowsertest
  2.  
  3. import android.Manifest
  4. import android.content.ComponentName
  5. import android.content.Context
  6. import android.content.pm.PackageManager
  7. import android.content.res.Configuration
  8. import android.media.AudioManager
  9. import android.media.MediaDataSource
  10. import android.media.session.MediaController
  11. import android.os.Build
  12.  
  13. import android.support.v7.app.AppCompatActivity
  14. import android.os.Bundle
  15. import android.provider.MediaStore
  16. import android.support.annotation.RequiresApi
  17. import android.support.v4.app.ActivityCompat
  18. import android.support.v4.content.ContextCompat
  19. import android.support.v4.media.MediaBrowserCompat
  20. import android.support.v4.media.MediaBrowserServiceCompat
  21. import android.support.v4.media.MediaMetadataCompat
  22. import android.support.v4.media.session.MediaControllerCompat
  23. import android.support.v4.media.session.PlaybackStateCompat
  24. import android.util.Log
  25. import android.view.View
  26. import android.widget.ImageView
  27.  
  28.  
  29. class MainActivity : AppCompatActivity() {
  30. private lateinit var mMediaBrowser: MediaBrowserCompat
  31. fun buildTransportControls(){
  32. mMediaBrowser.subscribe(mMediaBrowser.root,object: MediaBrowserCompat.SubscriptionCallback(){})
  33. //mMediaBrowser.getItem("")
  34.  
  35. Log.i("EXTRAS",mMediaBrowser.extras.toString())
  36.  
  37.  
  38. var mPlayPause = findViewById<ImageView>(R.id.imageView)
  39. //Attach listen to button
  40. mPlayPause.setOnClickListener(object: View.OnClickListener {
  41. override fun onClick(v : View ){
  42. var pbSate = MediaControllerCompat.getMediaController(this@MainActivity).playbackState.playbackState
  43. if(pbSate == PlaybackStateCompat.STATE_PLAYING){
  44. Log.i("1","11111")
  45. MediaControllerCompat.getMediaController(this@MainActivity).transportControls.pause()
  46. }else{
  47. Log.i("1","22222")
  48. MediaControllerCompat.getMediaController(this@MainActivity).transportControls.playFromMediaId("Böug",null)
  49. MediaControllerCompat.getMediaController(this@MainActivity).transportControls.play()
  50.  
  51. //MediaControllerCompat.getMediaController(this@MainActivity).transportControls.playFromMediaId()
  52.  
  53.  
  54. }
  55. }
  56. })
  57. var mediaController = MediaControllerCompat.getMediaController(this@MainActivity)
  58.  
  59. //Show Init state
  60. var metadat = mediaController.metadata
  61. var pbState = mediaController.playbackState
  62.  
  63. //Register Callback to stay synced
  64. mediaController.registerCallback(controllerCallback)
  65.  
  66.  
  67.  
  68. }
  69. val controllerCallback = object : MediaControllerCompat.Callback() {
  70. override fun onMetadataChanged(metadat:MediaMetadataCompat){
  71.  
  72. Log.i("Musik",metadat.toString())
  73.  
  74. }
  75.  
  76. override fun onPlaybackStateChanged(state :PlaybackStateCompat){}
  77. }
  78.  
  79. private val mConnectionCallbacks = object : MediaBrowserCompat.ConnectionCallback() {
  80. override fun onConnected() {
  81. Log.i("Connection","Connecting")
  82. // Get the token for the MediaSession
  83. val token = mMediaBrowser.sessionToken
  84.  
  85. // Create a MediaControllerCompat
  86. val mediaController = MediaControllerCompat(this@MainActivity,token)
  87.  
  88. // Save the controller
  89. MediaControllerCompat.setMediaController(this@MainActivity, mediaController)
  90.  
  91. // Finish building the UI
  92. buildTransportControls()
  93. }
  94.  
  95. override fun onConnectionSuspended() {
  96. // The Service has crashed. Disable transport controls until it automatically reconnects
  97. Log.i("ERROR","Connection Suspended")
  98. }
  99.  
  100. override fun onConnectionFailed() {
  101. // The Service has refused our connection
  102. Log.i("ERROR","Connection Failed")
  103. }
  104. }
  105.  
  106. override fun onCreate(savedInstanceState: Bundle?) {
  107. super.onCreate(savedInstanceState)
  108. setContentView(R.layout.activity_main)
  109. Log.i("Hello World","Hello")
  110. permissionRequest()
  111. if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
  112. //Create MediaBrowser Service
  113. mMediaBrowser = MediaBrowserCompat(this,
  114. ComponentName(this, MediaPlaybackService::class.java),
  115. mConnectionCallbacks,
  116. null)
  117. }
  118.  
  119. Log.i("Hello World","Hello2")
  120.  
  121.  
  122. }
  123.  
  124. override fun onStart() {
  125. super.onStart()
  126. mMediaBrowser.connect()
  127.  
  128. }
  129.  
  130. override fun onResume() {
  131. super.onResume()
  132. volumeControlStream = AudioManager.STREAM_MUSIC
  133. }
  134.  
  135. override fun onStop() {
  136. super.onStop()
  137. if(MediaControllerCompat.getMediaController(this@MainActivity) != null){
  138. MediaControllerCompat.getMediaController(this@MainActivity).unregisterCallback(controllerCallback)
  139.  
  140. }
  141. mMediaBrowser.disconnect()
  142. }
  143.  
  144.  
  145. fun permissionRequest(){
  146. val permissions = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
  147.  
  148. if(permissions != PackageManager.PERMISSION_GRANTED){
  149. ActivityCompat.requestPermissions(this, arrayOf(
  150. Manifest.permission.READ_EXTERNAL_STORAGE
  151. ),101)
  152. }
  153.  
  154.  
  155.  
  156. }
  157.  
  158. }
  159.  
  160. package com.name.mediabrowsertest
  161.  
  162.  
  163. import android.media.MediaDescription
  164. import android.media.MediaMetadata
  165. import android.media.browse.MediaBrowser
  166. import android.media.session.MediaSession
  167. import android.os.Build
  168. import android.os.Bundle
  169. import android.provider.MediaStore
  170. import android.support.annotation.RequiresApi
  171. import android.support.v4.media.MediaBrowserCompat
  172. import android.support.v4.media.MediaBrowserServiceCompat
  173. import android.support.v4.media.MediaDescriptionCompat
  174. import android.support.v4.media.MediaMetadataCompat
  175. import android.support.v4.media.session.MediaSessionCompat
  176. import android.support.v4.media.session.PlaybackStateCompat
  177. import android.util.Log
  178. import com.name.mediabrowsertest.Services.contentcatalogs.MusicLibrary
  179.  
  180.  
  181. class MediaPlaybackService: MediaBrowserServiceCompat(){
  182.  
  183. //private val MY_MEDIA_ROOT_ID = "MediaStore.Audio.Media.EXTERNAL_CONTENT_URI"
  184. private val MY_MEDIA_ROOT_ID ="root"
  185.  
  186. private lateinit var mMediaSession: MediaSessionCompat
  187. private lateinit var mStateBuilder : PlaybackStateCompat.Builder
  188. private var MySessionCallback =object : MediaSessionCompat.Callback() {
  189. override fun onPause() {
  190. super.onPause()
  191. }
  192.  
  193. override fun onPlay() {
  194. super.onPlay()
  195. }
  196. }
  197.  
  198. override fun onCreate() {
  199. super.onCreate()
  200. //Create the MediaSession
  201. mMediaSession = MediaSessionCompat(this,"PLAYER")
  202. //Setting the necessary Flags (Media Buttons)
  203. mMediaSession.setFlags(
  204. MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
  205. //Set an inital PlaybackStatewith ACTION_BUTTONS, so Media buttons can start the player
  206. mStateBuilder = PlaybackStateCompat.Builder().setActions(
  207. PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PAUSE)
  208. //Set our PLaybackState for the MediaSession
  209. mMediaSession.setPlaybackState(mStateBuilder.build())
  210.  
  211. //Handles callbacks from Media Controller MySessionCalback is a PlaeHolder
  212. mMediaSession.setCallback(MySessionCallback)
  213. //Set SessionToken so Activites can communicate with it
  214. sessionToken = mMediaSession.sessionToken
  215.  
  216.  
  217.  
  218. }
  219.  
  220. override fun onLoadChildren(parentId: String, result: Result<MutableList<MediaBrowserCompat.MediaItem>>) {
  221. var mediaItems:ArrayList<MediaBrowserCompat.MediaItem> = ArrayList()
  222.  
  223.  
  224. var albums = MusicLibrary(this@MediaPlaybackService).getMusic()
  225. for(item in MusicLibrary.MusicFiles){
  226. val songList = MediaBrowserCompat.MediaItem(item,
  227. MediaBrowserCompat.MediaItem.FLAG_PLAYABLE)
  228. mediaItems.add(songList)
  229. }
  230.  
  231.  
  232. Log.i("MEDIA_ITEMS",mediaItems.toString())
  233. result.sendResult(mediaItems)
  234.  
  235. }
  236.  
  237. override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot? {
  238.  
  239. return BrowserRoot(MY_MEDIA_ROOT_ID,null)
  240.  
  241. }
  242.  
  243.  
  244.  
  245. }
  246.  
  247. package com.name.mediabrowsertest.Services.contentcatalogs
  248.  
  249. import android.annotation.SuppressLint
  250. import android.content.ContentUris
  251. import android.content.Context
  252. import android.database.Cursor
  253. import android.graphics.drawable.Drawable
  254. import android.net.Uri
  255. import android.provider.MediaStore
  256. import android.support.v4.media.MediaDescriptionCompat
  257. import android.util.Log
  258. import com.name.mediabrowsertest.R
  259. import java.io.FileNotFoundException
  260.  
  261.  
  262. class MusicLibrary(val context: Context) {
  263.  
  264. companion object {
  265. lateinit var albums: ArrayList<String>
  266. var MusicFiles = arrayListOf<MediaDescriptionCompat>()
  267. }
  268.  
  269. var desc= arrayListOf<MediaDescriptionCompat>()
  270. var music_Artist = arrayListOf<String>()
  271. var music_CoverID = arrayListOf<Drawable>()
  272. var music_Duration = arrayListOf<Int>()
  273. var album_Title = arrayListOf<String>()
  274.  
  275.  
  276. @SuppressLint("NewApi")
  277. fun getMusic() {
  278.  
  279. val contentResolver = context.contentResolver
  280. var songUri: Uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
  281. var songCursor: Cursor = contentResolver.query(songUri, null, null, null, null)
  282.  
  283. //Defining the Uri for the Album covers
  284. val artworkUri = Uri.parse("content://media/external/audio/albumart")
  285. var albumArtUri: Uri
  286. var albumDrawable: Drawable
  287.  
  288. if (songCursor != null && songCursor.moveToFirst()) {
  289. //Getting the Position of the stored values
  290.  
  291. var albumCoverId: Int = songCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)
  292. var songDuration = songCursor.getColumnIndex(MediaStore.Audio.Media.DURATION)
  293.  
  294.  
  295. var albumTitle = songCursor.getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM)
  296.  
  297.  
  298.  
  299. do {
  300. //Ensure that atleast on Element is in album_Title
  301. if(!album_Title.isEmpty()) {
  302. //Test if album is already in array
  303. if(album_Title.contains(songCursor.getString(albumTitle))) {
  304. //If album is already in Array skip loop
  305. continue
  306. }
  307.  
  308. }
  309.  
  310. album_Title.add(songCursor.getString(albumTitle))
  311.  
  312.  
  313. //getting the Uri of the Album
  314. albumArtUri = ContentUris.withAppendedId(artworkUri, songCursor.getLong(albumCoverId))
  315. //Try to get the Album cover and catch if fail
  316. try {
  317. var imageInputStream = context.contentResolver.openInputStream(albumArtUri)
  318. albumDrawable = Drawable.createFromStream(imageInputStream, albumArtUri.toString())
  319. } catch (e: FileNotFoundException) {
  320. albumDrawable = context.getDrawable(R.drawable.baum)
  321. }
  322. //Add the Values to the Array
  323. music_CoverID.add(albumDrawable)
  324. music_Duration.add((songCursor.getInt(songDuration)) / 1000 * 60)
  325. //Get Location of File
  326.  
  327. var mediaDescriper = MediaDescriptionCompat.Builder().setMediaId(songCursor.getString(albumCoverId)).setTitle(songCursor.getString(albumTitle)).build()
  328. MusicFiles.add(mediaDescriper)
  329. Log.i("ALBUMNAMES", album_Title.toString())
  330.  
  331.  
  332.  
  333. //Go to the next Cursor Position
  334. } while (songCursor.moveToNext())
  335.  
  336. //Copy values to Compainon Object
  337. albums = album_Title
  338. Log.i("MUSICLIBRARY",MusicFiles.toString())
  339.  
  340.  
  341.  
  342. }
  343.  
  344.  
  345. }
  346.  
  347.  
  348. }
Add Comment
Please, Sign In to add comment