Игорь Маринин Опубликовано 12 августа Поделиться Опубликовано 12 августа Приложения для ТВ, воспроизводящие аудио, могут продолжать делать это после того, как пользователь возвращается на главный экран или переключается на другое приложение. Для этого приложение должно предоставить карточку Now Playing на главном экране. https://developer.android.com/training/tv/playback/now-playing для теста набросал код, но ничего не происходит. при старте активирую медиасессию CreateMediaSession(optActive: boolean); при старте проигрывания UpdateMediaMetadata('name song', 'artist'); при остановке UpdateMediaMetadata('', ''); что не так? unit AndroidMedia; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.IOUtils, Androidapi.JNI.Media, Androidapi.JNI.App; procedure CreateMediaSession(optActive: boolean); procedure UpdatePlaybackState(State: Integer); procedure UpdateMediaMetadata(Title, Artist: string); var MediaSession: JMediaSession; implementation uses DateUtils, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers; procedure CreateMediaSession(optActive: boolean); var PendingIntent: JPendingIntent; Intent: JIntent; begin if (not optActive) or (Assigned(MediaSession)) then begin if Assigned(MediaSession) then MediaSession.setActive(false); if (not optActive) then exit; end; Intent := TJIntent.JavaClass.init; Intent.setClassName(TAndroidHelper.Context.getPackageName, StringToJString('com.embarcadero.firemonkey.FMXNativeActivity')); PendingIntent := TJPendingIntent.JavaClass.getActivity(TAndroidHelper.Context, 99, Intent, TJPendingIntent.JavaClass.FLAG_UPDATE_CURRENT); MediaSession := TJMediaSession.JavaClass.init(TAndroidHelper.Context, StringToJString('myMediaSession')); MediaSession.setFlags(TJMediaSession.JavaClass.FLAG_HANDLES_MEDIA_BUTTONS or TJMediaSession.JavaClass.FLAG_HANDLES_TRANSPORT_CONTROLS); MediaSession.setSessionActivity(PendingIntent); MediaSession.setActive(True); end; procedure UpdatePlaybackState(State: Integer); var PlaybackState: JPlaybackState_Builder; myPlaybackState: JPlaybackState; begin if not Assigned(MediaSession) then exit; PlaybackState := TJPlaybackState_Builder.JavaClass.init; PlaybackState.setState(State, 0, 1.0, DateTimeToMilliseconds(now)); myPlaybackState:= PlaybackState.build; MediaSession.setPlaybackState(myPlaybackState); end; procedure UpdateMediaMetadata(Title, Artist: string); var MetadataBuilder: JMediaMetadata_Builder; Metadata: Jmedia_MediaMetadata; begin if not Assigned(MediaSession) then exit; if title = '' then begin MediaSession.setMetadata(nil); exit; end; UpdatePlaybackState(TJPlaybackState.JavaClass.STATE_PLAYING); MetadataBuilder := TJMediaMetadata_Builder.JavaClass.init; MetadataBuilder.putString(TJmedia_MediaMetadata.JavaClass.METADATA_KEY_TITLE, StringToJString(Title)); MetadataBuilder.putString(TJmedia_MediaMetadata.JavaClass.METADATA_KEY_ARTIST, StringToJString(Artist)); Metadata := MetadataBuilder.build; MediaSession.setMetadata(Metadata); end; initialization MediaSession := nil; end. Цитата Ссылка на комментарий
Вопрос
Игорь Маринин
Приложения для ТВ, воспроизводящие аудио, могут продолжать делать это после того, как пользователь возвращается на главный экран или переключается на другое приложение. Для этого приложение должно предоставить карточку Now Playing на главном экране.
https://developer.android.com/training/tv/playback/now-playing
для теста набросал код, но ничего не происходит.
при старте активирую медиасессию CreateMediaSession(optActive: boolean);
при старте проигрывания UpdateMediaMetadata('name song', 'artist');
при остановке UpdateMediaMetadata('', '');
что не так?
unit AndroidMedia; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.IOUtils, Androidapi.JNI.Media, Androidapi.JNI.App; procedure CreateMediaSession(optActive: boolean); procedure UpdatePlaybackState(State: Integer); procedure UpdateMediaMetadata(Title, Artist: string); var MediaSession: JMediaSession; implementation uses DateUtils, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers; procedure CreateMediaSession(optActive: boolean); var PendingIntent: JPendingIntent; Intent: JIntent; begin if (not optActive) or (Assigned(MediaSession)) then begin if Assigned(MediaSession) then MediaSession.setActive(false); if (not optActive) then exit; end; Intent := TJIntent.JavaClass.init; Intent.setClassName(TAndroidHelper.Context.getPackageName, StringToJString('com.embarcadero.firemonkey.FMXNativeActivity')); PendingIntent := TJPendingIntent.JavaClass.getActivity(TAndroidHelper.Context, 99, Intent, TJPendingIntent.JavaClass.FLAG_UPDATE_CURRENT); MediaSession := TJMediaSession.JavaClass.init(TAndroidHelper.Context, StringToJString('myMediaSession')); MediaSession.setFlags(TJMediaSession.JavaClass.FLAG_HANDLES_MEDIA_BUTTONS or TJMediaSession.JavaClass.FLAG_HANDLES_TRANSPORT_CONTROLS); MediaSession.setSessionActivity(PendingIntent); MediaSession.setActive(True); end; procedure UpdatePlaybackState(State: Integer); var PlaybackState: JPlaybackState_Builder; myPlaybackState: JPlaybackState; begin if not Assigned(MediaSession) then exit; PlaybackState := TJPlaybackState_Builder.JavaClass.init; PlaybackState.setState(State, 0, 1.0, DateTimeToMilliseconds(now)); myPlaybackState:= PlaybackState.build; MediaSession.setPlaybackState(myPlaybackState); end; procedure UpdateMediaMetadata(Title, Artist: string); var MetadataBuilder: JMediaMetadata_Builder; Metadata: Jmedia_MediaMetadata; begin if not Assigned(MediaSession) then exit; if title = '' then begin MediaSession.setMetadata(nil); exit; end; UpdatePlaybackState(TJPlaybackState.JavaClass.STATE_PLAYING); MetadataBuilder := TJMediaMetadata_Builder.JavaClass.init; MetadataBuilder.putString(TJmedia_MediaMetadata.JavaClass.METADATA_KEY_TITLE, StringToJString(Title)); MetadataBuilder.putString(TJmedia_MediaMetadata.JavaClass.METADATA_KEY_ARTIST, StringToJString(Artist)); Metadata := MetadataBuilder.build; MediaSession.setMetadata(Metadata); end; initialization MediaSession := nil; end.
Ссылка на комментарий
0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.