Exemple #1
0
        public override void OnCreate()
        {
            base.OnCreate();

            // Create a MediaSessionCompat
            mMediaSession = new MediaSessionCompat(ApplicationContext, LogTag);

            // Enable callbacks from MediaButtons and TransportControls
            mMediaSession.SetFlags(
                MediaSessionCompat.FlagHandlesMediaButtons |
                MediaSessionCompat.FlagHandlesTransportControls);

            // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
            mStateBuilder = new PlaybackStateCompat.Builder()
                            .SetActions(
                PlaybackStateCompat.ActionPlay |
                PlaybackStateCompat.ActionPause);

            mMediaSession.SetPlaybackState(mStateBuilder.Build());

            // MySessionCallback() has methods that handle callbacks from a media controller
            mMediaSession.SetCallback(new MySessionCallback());

            // Set the session's token so that client activities can communicate with it.
            SessionToken = mMediaSession.SessionToken;
        }
Exemple #2
0
        public void Initialize(Context context)
        {
            mMessageReceiver = new MusicControlsBroadcastReceiver(this);
            RegisterBroadcaster(context, mMessageReceiver);

            mediaSessionCompat = new MediaSessionCompat(context, "music-controls-media-session", null, mediaButtonPendingIntent);
            mediaSessionCompat.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons | MediaSessionCompat.FlagHandlesTransportControls);

            SetMediaPlaybackState((int)PlaybackStateCompat.StatePaused);

            mediaSessionCompat.Active = true;
            mediaSessionCompat.SetCallback(mMediaSessionCallback);

            try
            {
                mAudioManager = (AudioManager)context.GetSystemService(Context.AudioService);
                var headsetIntent = new Intent(musicControlsButton);
                mediaButtonPendingIntent = PendingIntent.GetBroadcast(context, 0, headsetIntent, PendingIntentFlags.UpdateCurrent);
                RegisterMediaButtonEvent();

                //MediaButtonReceiver.HandleIntent(mediaSessionCompat, headsetIntent);
                //BroadcastReceiver.
            }
            catch (Exception exc)
            {
            }
        }
        internal void InitMediaSession(string packageName, MediaServiceBinder binder)
        {
            try
            {
                if (mediaSessionCompat == null)
                {
                    Intent        nIntent = new Intent(applicationContext, typeof(MediaPlayer));
                    PendingIntent pIntent = PendingIntent.GetActivity(applicationContext, 0, nIntent, 0);

                    RemoteComponentName   = new ComponentName(packageName, new RemoteControlBroadcastReceiver().ComponentName);
                    mediaSessionCompat    = new MediaSessionCompat(applicationContext, "XamarinStreamingAudio", RemoteComponentName, pIntent);
                    mediaControllerCompat = new MediaControllerCompat(applicationContext, mediaSessionCompat.SessionToken);
                }
                mediaSessionCompat.Active = true;
                //mediaSessionCompat.SetCallback(binder.GetMediaPlayerService().AlternateRemoteCallback ?? new MediaSessionCallback(binder));
                mediaSessionCompat.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons | MediaSessionCompat.FlagHandlesTransportControls);
                NotificationManager = new MediaNotificationManagerImplementation(applicationContext, CurrentSession.SessionToken, typeof(MediaPlayerService));
                _packageName        = packageName;
                _binder             = binder;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
Exemple #4
0
        protected virtual void PrepareMediaSession()
        {
            MediaSession = new MediaSessionCompat(this, nameof(MediaBrowserService));
            MediaSession.SetSessionActivity(SessionActivityPendingIntent);
            MediaSession.Active = true;

            SessionToken = MediaSession.SessionToken;

            MediaSession.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons |
                                  MediaSessionCompat.FlagHandlesTransportControls);
        }
Exemple #5
0
        public RadioStationMediaSession(Context context)
        {
            var intent        = new Intent(context, typeof(Android.App.Activity));
            var pendingIntent = PendingIntent.GetActivity(context, 0, intent, 0);
            var componentName = new ComponentName(context.PackageName, new RadioStationBroadcastReceiver().ComponentName);

            _session    = new MediaSessionCompat(context, "wzxv.app", componentName, pendingIntent);
            _controller = new MediaControllerCompat(context, _session.SessionToken);

            _session.SetCallback(new MediaSessionCallback(context));
            _session.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons | MediaSessionCompat.FlagHandlesTransportControls);
            _session.Active = true;
        }
        public RadioStationMediaSession(Context context)
        {
            var intent        = new Intent(context, typeof(MainActivity));
            var pendingIntent = PendingIntent.GetActivity(context, 0, intent, 0);
            var componentName = new ComponentName(context.PackageName, new RadioStationBroadcastReceiver().ComponentName);

            _session = new MediaSessionCompat(context, "wzxv.app", componentName, pendingIntent)
            {
                Active = true
            };
            _session.SetCallback(new MediaSessionCallback(context));
            _session.SetFlags((int)(MediaSessionFlags.HandlesMediaButtons | MediaSessionFlags.HandlesTransportControls));
        }
        public override void OnCreate()
        {
            base.OnCreate();
            Shared = this;
            NativeAudioPlayer.NativeInit(this);
            PlaybackManager.Shared.Init();
            Session      = new MediaSessionCompat(this, "MusicService");
            SessionToken = Session.SessionToken;
            Session.SetCallback(sessionCallback = new MediaSessionCallback());
            Session.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons |
                             MediaSessionCompat.FlagHandlesTransportControls);
            var context = ApplicationContext;
            var intent  = new Intent(ApplicationContext, typeof(NowPlayingActivity));
            var pi      = PendingIntent.GetActivity(context, 99, intent, PendingIntentFlags.UpdateCurrent);

            Session.SetSessionActivity(pi);

            sessionExtras = new Bundle();

            //		CarHelper.setSlotReservationFlags(mSessionExtras, true, true, true);
            //        WearHelper.setSlotReservationFlags(mSessionExtras, true, true);
            //        WearHelper.setUseBackgroundFromTheme(mSessionExtras, true);

            Session.SetExtras(sessionExtras);


            try
            {
                MediaNotificationManager = new MediaNotificationManager(this);
            }
            catch (Exception ex)
            {
                LogManager.Shared.Report(ex);
                throw ex;
            }

            //VideoCastManager.getInstance().addVideoCastConsumer(mCastConsumer);
            mediaRouter = Android.Support.V7.Media.MediaRouter.GetInstance(ApplicationContext);

            //registerCarConnectionReceiver();
            Managers.NotificationManager.Shared.PlaybackStateChanged += PlaybackStateChanged;
        }
        private void InitializeMediaSession()
        {
            try
            {
                if (_mediaSessionCompat == null)
                {
                    Intent        intent        = new Intent(ApplicationContext, typeof(MainActivity));
                    PendingIntent pendingIntent = PendingIntent.GetActivity(ApplicationContext, 0, intent, 0);

                    _remoteComponentName   = new ComponentName(PackageName, new AudioControlsBroadcastReceiver().ComponentName);
                    _mediaSessionCompat    = new MediaSessionCompat(ApplicationContext, "VinylScratch", _remoteComponentName, pendingIntent);
                    _mediaControllerCompat = new MediaControllerCompat(ApplicationContext, _mediaSessionCompat.SessionToken);
                }

                _mediaSessionCompat.Active = true;
                _mediaSessionCompat.SetCallback(new AudioServiceCallback((AudioServiceBinder)_binder));
                _mediaSessionCompat.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons | MediaSessionCompat.FlagHandlesTransportControls);
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e);
            }
        }
Exemple #9
0
        private void CreateNoti()
        {
            try
            {
                BigViews   = new RemoteViews(PackageName, Resource.Layout.CustomNotificationLayout);
                SmallViews = new RemoteViews(PackageName, Resource.Layout.CustomNotificationSmallLayout);

                Intent notificationIntent = new Intent(this, typeof(SplashScreenActivity));
                notificationIntent.SetAction(Intent.ActionMain);
                notificationIntent.AddCategory(Intent.CategoryLauncher);
                notificationIntent.PutExtra("isnoti", true);
                PendingIntent pendingIntent = PendingIntent.GetActivity(this, 0, notificationIntent, PendingIntentFlags.UpdateCurrent);

                Intent previousIntent = new Intent(this, typeof(PlayerService));
                previousIntent.SetAction(ActionRewind);
                PendingIntent ppreviousIntent = PendingIntent.GetService(this, 0, previousIntent, 0);

                Intent playIntent = new Intent(this, typeof(PlayerService));
                playIntent.SetAction(ActionToggle);
                PendingIntent pplayIntent = PendingIntent.GetService(this, 0, playIntent, 0);

                Intent nextIntent = new Intent(this, typeof(PlayerService));
                nextIntent.SetAction(ActionSkip);
                PendingIntent pnextIntent = PendingIntent.GetService(this, 0, nextIntent, 0);

                Intent closeIntent = new Intent(this, typeof(PlayerService));
                closeIntent.SetAction(ActionStop);
                PendingIntent pcloseIntent = PendingIntent.GetService(this, 0, closeIntent, 0);

                Notification = new NotificationCompat.Builder(this, NotificationChannelId)
                               .SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Mipmap.icon))
                               .SetContentTitle(AppSettings.ApplicationName)
                               .SetPriority((int)NotificationPriority.Max)
                               .SetContentIntent(pendingIntent)
                               .SetSmallIcon(Resource.Drawable.icon_notification)
                               .SetTicker(Constant.ArrayListPlay[Constant.PlayPos]?.Title)
                               .SetChannelId(NotificationChannelId)
                               .SetOngoing(true)
                               .SetAutoCancel(true)
                               .SetOnlyAlertOnce(true);

                NotificationChannel mChannel;
                if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
                {
                    NotificationImportance importance = NotificationImportance.Low;
                    mChannel = new NotificationChannel(NotificationChannelId, AppSettings.ApplicationName, importance);
                    MNotificationManager.CreateNotificationChannel(mChannel);

                    MediaSessionCompat mMediaSession = new MediaSessionCompat(Application.Context, AppSettings.ApplicationName);
                    mMediaSession.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons | MediaSessionCompat.FlagHandlesTransportControls);

                    Notification.SetStyle(new Android.Support.V4.Media.App.NotificationCompat.MediaStyle()
                                          .SetMediaSession(mMediaSession.SessionToken).SetShowCancelButton(true)
                                          .SetShowActionsInCompactView(0, 1, 2)
                                          .SetCancelButtonIntent(MediaButtonReceiver.BuildMediaButtonPendingIntent(Application.Context, PlaybackStateCompat.ActionStop)))
                    .AddAction(new NotificationCompat.Action(Resource.Xml.ic_skip_previous, "Previous", ppreviousIntent))
                    .AddAction(new NotificationCompat.Action(Resource.Xml.ic_pause, "Pause", pplayIntent))
                    .AddAction(new NotificationCompat.Action(Resource.Xml.ic_skip_next, "Next", pnextIntent))
                    .AddAction(new NotificationCompat.Action(Resource.Drawable.ic_action_close, "Close", pcloseIntent));
                }
                else
                {
                    string songName   = Methods.FunString.DecodeString(Constant.ArrayListPlay[Constant.PlayPos]?.Title);
                    string genresName = Methods.FunString.DecodeString(Constant.ArrayListPlay[Constant.PlayPos]?.CategoryName) + " " + Application.Context.Resources.GetString(Resource.String.Lbl_Music);

                    BigViews.SetOnClickPendingIntent(Resource.Id.imageView_noti_play, pplayIntent);
                    BigViews.SetOnClickPendingIntent(Resource.Id.imageView_noti_next, pnextIntent);
                    BigViews.SetOnClickPendingIntent(Resource.Id.imageView_noti_prev, ppreviousIntent);
                    BigViews.SetOnClickPendingIntent(Resource.Id.imageView_noti_close, pcloseIntent);
                    SmallViews.SetOnClickPendingIntent(Resource.Id.status_bar_collapse, pcloseIntent);

                    BigViews.SetImageViewResource(Resource.Id.imageView_noti_play, Android.Resource.Drawable.IcMediaPause);
                    BigViews.SetTextViewText(Resource.Id.textView_noti_name, songName);
                    SmallViews.SetTextViewText(Resource.Id.status_bar_track_name, songName);
                    BigViews.SetTextViewText(Resource.Id.textView_noti_artist, genresName);
                    SmallViews.SetTextViewText(Resource.Id.status_bar_artist_name, genresName);
                    BigViews.SetImageViewResource(Resource.Id.imageView_noti, Resource.Mipmap.icon);
                    SmallViews.SetImageViewResource(Resource.Id.status_bar_album_art, Resource.Mipmap.icon);
                    Notification.SetCustomContentView(SmallViews).SetCustomBigContentView(BigViews);
                }

                ShowNotification();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
        public static async void UpdateChromecastNotification(string title, string body, bool isPaused, string poster, long time, long duration)
        {
            try {
                //new Android.Support.V4.Media.Session.MediaControllerCompat.
                var builder = new AndroidX.Core.App.NotificationCompat.Builder(Application.Context);
                builder.SetContentTitle(title);
                builder.SetContentText(body);
                builder.SetAutoCancel(false);

                builder.SetSmallIcon(Resource.Drawable.round_cast_white_48dp2_4);
                builder.SetOngoing(true);

                var context = MainActivity.activity.ApplicationContext;
                if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
                {
                    var channelId = $"{PkgName}.general";
                    var channel   = new NotificationChannel(channelId, "General", NotificationImportance.Default);

                    NotManager.CreateNotificationChannel(channel);

                    builder.SetChannelId(channelId);
                    //https://m.media-amazon.com/images/M/MV5BMTczNTI2ODUwOF5BMl5BanBnXkFtZTcwMTU0NTIzMw@@._V1_UX182_CR0,0,182,268_AL_.jpg
                    var bitmap = await GetImageBitmapFromUrl(poster);                    //"https://m.media-amazon.com/images/M/MV5BMTczNTI2ODUwOF5BMl5BanBnXkFtZTcwMTU0NTIzMw@@._V1_UX182_CR0,0,182,268_AL_.jpg");

                    if (bitmap != null)
                    {
                        builder.SetLargeIcon(bitmap);
                    }

                    var stateBuilder = new PlaybackStateCompat.Builder()
                                       .SetActions(PlaybackStateCompat.ActionSeekTo | PlaybackStateCompat.ActionPause | PlaybackStateCompat.ActionPlay | PlaybackStateCompat.ActionStop)
                                       .SetState(
                        isPaused ? PlaybackStateCompat.StatePaused : PlaybackStateCompat.StatePlaying,
                        time, 1f, SystemClock.ElapsedRealtime()
                        );

                    mediaSession.SetPlaybackState(stateBuilder.Build());
                    mediaSession.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons | MediaSessionCompat.FlagHandlesTransportControls);
                    mediaSession.SetMetadata(new Android.Support.V4.Media.MediaMetadataCompat.Builder()
                                                                                                   //.PutString(MediaMetadata.MetadataKeyArtist, "title")
                                                                                                   //.PutString(MediaMetadata.MetadataKeyTitle, "genre")
                                             .PutLong(MediaMetadata.MetadataKeyDuration, duration) //Negative duration means the duration is unknown
                                                                                                   // .PutString(MediaMetadata.MetadataKeyArt, "https://homepages.cae.wisc.edu/~ece533/images/peppers.png")
                                             .Build());
                    builder.SetColor(Android.Graphics.Color.Black.ToArgb());                       // THIS IS VERY IMPORTANT FOR THE APPERANCE OF THE SEEKBAR IN THE NOTIFICATION
                    builder.SetColorized(true);

                    mediaSession.Active = true;

                    //	mediaSession.SetMetadata(new Android.Support.V4.Media.MediaMetadataCompat() { Description = new Android.Support.V4.Media.MediaDescriptionCompat() { } })

                    List <string> actionNames = new List <string>()
                    {
                        "-30s", isPaused ? "Play" : "Pause", "+30s", "Stop"
                    };
                    List <int> sprites = new List <int>()
                    {
                        Resource.Drawable.netflixGoBack128, isPaused ? Resource.Drawable.netflixPlay128v2 : Resource.Drawable.netflixPause128v2, Resource.Drawable.netflixGoForward128, Resource.Drawable.netflixStop128v2
                    };
                    List <string> actionIntent = new List <string>()
                    {
                        "goback", isPaused ? "play" : "pause", "goforward", "stop"
                    };                                                                                                                                 // next

                    for (int i = 0; i < sprites.Count; i++)
                    {
                        var _resultIntent = new Intent(context, typeof(ChromeCastIntentService));
                        _resultIntent.PutExtra("data", actionIntent[i]);
                        var _pending = PendingIntent.GetService(context, 2337 + i,
                                                                _resultIntent,
                                                                PendingIntentFlags.UpdateCurrent
                                                                );

                        builder.AddAction(new AndroidX.Core.App.NotificationCompat.Action(sprites[i], actionNames[i], _pending));
                    }

                    builder.SetStyle(new NotificationCompat.MediaStyle().SetMediaSession(mediaSession.SessionToken).SetShowActionsInCompactView(0, 1, 2));                     // NICER IMAGE
                }

                builder.SetContentIntent(GetCurrentPending("openchrome"));

                try {
                    NotManager.Notify(CHROME_CAST_NOTIFICATION_ID, builder.Build());
                }
                catch (Exception _ex) {
                    print("EX NOTTIFY;; " + _ex);
                }
            }
            catch (Exception _ex) {
                error(_ex);
            }
        }
Exemple #11
0
 void CreateMediaSession()
 {
     mediaSession = new MediaSessionCompat(this, "CloudStream 2");
     mediaSession.SetFlags((int)(MediaSessionFlags.HandlesMediaButtons | MediaSessionFlags.HandlesTransportControls));
     mediaSession.SetCallback(new MediaSessionCallback());
 }
Exemple #12
0
        public override void OnCreate()
        {
            base.OnCreate();
            LogHelper.Debug(Tag, "onCreate");

            musicProvider = new MusicProvider();

            var context = ApplicationContext;

            var hasReadExternalStoragePermission = ActivityCompat.CheckSelfPermission(context, Manifest.Permission.ReadExternalStorage);

            if (hasReadExternalStoragePermission == Permission.Granted)
            {
                musicProvider.RetrieveMediaAsync(context, null);
            }
            else
            {
                var msg = Resources.GetString(Resource.String.permission_denied_msg, "READ_EXTERNAL_STORAGE");
                Toast.MakeText(context, msg, ToastLength.Short).Show();
            }

            packageValidator = new PackageValidator(this);

            lightOrganProcessor = new LightOrganProcessor();
            lightOrganProcessor.LightOrganDataUpdated += (s, e) =>
            {
                OnLightOrganDataUpdated(e.Data);
            };

            var queueManager = new QueueManager(musicProvider, Resources,
                                                new QueueManager.MetadataUpdateListener
            {
                OnMetadataChanged = (metadata) =>
                {
                    session.SetMetadata(metadata);
                },

                OnMetadataRetrieveError = () =>
                {
                    playbackManager.UpdatePlaybackState(Resources.GetString(Resource.String.no_metadata_msg));
                },

                OnCurrentQueueIndexUpdated = (queueIndex) =>
                {
                    playbackManager.HandlePlayRequest();
                },

                OnQueueUpdated = (title, newQueue) =>
                {
                    session.SetQueue(newQueue);
                    session.SetQueueTitle(title);
                }
            });

            var hasRecordAudioPermission = ActivityCompat.CheckSelfPermission(context, Manifest.Permission.RecordAudio);

            if (hasRecordAudioPermission != Permission.Granted)
            {
                var msg = Resources.GetString(Resource.String.permission_denied_msg, "RECORD_AUDIO");
                Toast.MakeText(context, msg, ToastLength.Short).Show();
            }

            var playback = new LocalPlayback(this, musicProvider, hasRecordAudioPermission == Permission.Granted);

            playbackManager = new PlaybackManager(this, Resources, musicProvider, queueManager, playback);

            // Start a new MediaSession
            session      = new MediaSessionCompat(this, "MusicService");
            SessionToken = session.SessionToken;
            session.SetCallback(playbackManager.GetMediaSessionCallback());
            session.SetFlags(MediaSessionCompat.FlagHandlesMediaButtons |
                             MediaSessionCompat.FlagHandlesTransportControls);

            var intent = new Intent(context, typeof(MainActivity));
            var pi     = PendingIntent.GetActivity(context, 99 /*request code*/,
                                                   intent, PendingIntentFlags.UpdateCurrent);

            session.SetSessionActivity(pi);

            playbackManager.UpdatePlaybackState(null);

            try
            {
                mediaNotificationManager = new MediaNotificationManager(this);
            }
            catch (Exception e)
            {
                throw new Exception("Could not create a MediaNotificationManager", e);
            }
        }