>source

Mediastyle 알림 옵션이 없습니다.

다음은 MediaBrowserServiceCompat의 일부인 code입니다.

private void showPlayingNotification() {
    Context context= MyApplication.getInstance().getApplicationContext();
    Intent resumeIntent= new Intent(context, MainActivity.class);
    PendingIntent pendingResumeIntent= PendingIntent.getBroadcast(context, 12345, resumeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    Notification.Builder mBuilder= new Notification.Builder(this, NOTIFICATION_CHANNEL_ID);
    mBuilder.addAction(R.drawable.ic_back30, "rw30", MediaButtonReceiver.buildMediaButtonPendingIntent(this, PlaybackStateCompat.ACTION_REWIND))
            .addAction(R.drawable.ic_player_pause, "Pause", MediaButtonReceiver.buildMediaButtonPendingIntent(this, PlaybackStateCompat.ACTION_PLAY_PAUSE))
            .addAction(R.drawable.ic_forward30, "ff30", MediaButtonReceiver.buildMediaButtonPendingIntent(this, PlaybackStateCompat.ACTION_FAST_FORWARD))
            .addAction(android.R.drawable.ic_menu_close_clear_cancel, "Stop", MediaButtonReceiver.buildMediaButtonPendingIntent(this, PlaybackStateCompat.ACTION_STOP))
            .setStyle(new Notification.MediaStyle()
                    .setShowActionsInCompactView(0,1,2)
                    .setMediaSession((MediaSession.Token) mMediaSessionCompat.getSessionToken().getToken()))
            .setSmallIcon(R.drawable.ic_rss_icon)
            .setLargeIcon(mMediaSessionCompat.getController().getMetadata().getDescription().getIconBitmap())
            .setContentIntent(pendingResumeIntent);
    startForeground(12345, mBuilder.build());
}

여기에 내가 얻은 것이 있습니다. 미디어 세션 없이 알림

이제 상단 표시줄에 앱 아이콘이 표시되지만 2개의 다른 문제가 남아 있습니다.

  • 전체 크기 알림에 진행률 표시줄이 표시되지 않습니다.
  • .setColorized() 또는 .setColor()로 무엇을 하든 배경은 흰색으로 유지됩니다.

이 작업은 Samsung A52, Android 11에서 하고 있습니다. 다음은 gradle 파일입니다.

apply plugin: 'com.android.application'
android {
        compileSdkVersion 30
        defaultConfig {
                applicationId "com.podplay"
                minSdkVersion 30
                targetSdkVersion 30
                versionCode 1
                versionName "1.0"
                testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
            }
        buildTypes {
                release {
                    minifyEnabled false
                    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
                }
            }
        }

마지막:

  • Notification 또는 NotificationCompat을 사용하면 차이가 없습니다.
  • 빌더에 추가 설정이 없는 것 같습니다(우선순위, 카테고리, ...)
  • '이것'을 컨텍스트(응용 프로그램 대신)로 사용해 보았지만 소용이 없었습니다.

어떤 단서라도 주셔서 감사합니다 ...

  • 답변 # 1

    이것이 API가 작동하는 방식입니다. 둘 중 하나를 선택해야 합니다 또는 이와 같은 사용자 정의 미디어 스타일을 만드십시오.

    Notification noti= new Notification.Builder()
         .setSmallIcon(R.drawable.ic_stat_player)
         .setLargeIcon(albumArtBitmap))
         .setCustomContentView(contentView);
         .setStyle(new Notification.DecoratedMediaCustomViewStyle()
              .setMediaSession(mySession))
         .build();
    

    확인:

    답변 감사합니다. 그러나 DecoratedMediaCustomViewStyle은 MediaStyle의 하위 클래스이므로 상단 표시줄에 응용 프로그램 아이콘이 표시되지 않습니다.

    MF de Préval2021-11-23 20:14:15
  • 이전 c : 재할당 중 추적/중단점 트랩
  • 다음 python : Django에서 2개 더 많은 필터 선택