Xiaomi Redmi Note having issues when casting?

Recently we received this case from customers, letting us know that the Xiaomi Redmi Note 10 Pro (which is a very popular phone in regions like Latin America) crashes and gets into a Black Screen/ Lock screen loop that leads to a phone reset.

Based on our testing, the exception shown in LogCat is:
E load error, manifest root is null

AndroidRuntime pid-13739 E FATAL EXCEPTION: SysUiBg Process: com.android.systemui, PID: 13739

java.lang.RuntimeException: An error occurred while executing doInBackground()

at android.os.AsyncTask$4.done(AsyncTask.java:415)

at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:381)

at java.util.concurrent.FutureTask.setException(FutureTask.java:250)

at java.util.concurrent.FutureTask.run(FutureTask.java:269)

at android.os.Handler.handleCallback(Handler.java:938)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loopOnce(Looper.java:210)

at android.os.Looper.loop(Looper.java:299)

at android.os.HandlerThread.run(HandlerThread.java:67)

Caused by: java.lang.IllegalArgumentException: The given region must intersect with the Bitmap's dimensions.

at androidx.palette.graphics.Palette$Builder.setRegion(Palette.java:733)

at com.android.systemui.statusbar.notification.MediaNotificationProcessor.generateArtworkPaletteBuilder(MediaNotificationProcessor.java:109)

at com.android.systemui.statusbar.notification.mediacontrol.ProcessArtworkTask.processArtwork(ProcessArtworkTask.java:102)

at com.android.systemui.statusbar.notification.mediacontrol.ProcessArtworkTask.doInBackground(ProcessArtworkTask.java:77)

at com.android.systemui.statusbar.notification.mediacontrol.ProcessArtworkTask.doInBackground(ProcessArtworkTask.java:25)

at android.os.AsyncTask$3.call(AsyncTask.java:394)

at java.util.concurrent.FutureTask.run(FutureTask.java:264)

at android.os.Handler.handleCallback(Handler.java:938)

at android.os.Handler.dispatchMessage(Handler.java:99)

at android.os.Looper.loopOnce(Looper.java:210)

at android.os.Looper.loop(Looper.java:299)

at android.os.HandlerThread.run(HandlerThread.java:67)

After digging into the Stacktrace, this section:
java.lang.IllegalArgumentException: The given region must intersect with the Bitmap's dimensions.

gives away some information: the error doesn’t look to be related with casting itself, since the issue looks to be at the System UI level.

I am not an expert on Xiaomi, but few Forums suggest that the MIUI is sometimes problematic and even a suggestion about disabling MIUI optimisation on the developer tools is very popular (I tried disabling this but it had no effect on this issue ).

Disabling the MediaSession within the CastOptionsProvider seems to solve this issue.

In order to do this for the Bitmovin SDK, the following steps can be done:

  1. Create a new class CustomCastOptionsProvider:
package com.bitmovin.player.samples.casting.basic;

import android.content.Context;
import com.bitmovin.player.casting.BitmovinCastManager;
import com.google.android.gms.cast.LaunchOptions;
import com.google.android.gms.cast.framework.CastOptions;
import com.google.android.gms.cast.framework.OptionsProvider;
import com.google.android.gms.cast.framework.SessionProvider;
import com.google.android.gms.cast.framework.media.CastMediaOptions;

import java.util.List;

public class CustomCastOptionsProvider implements OptionsProvider {
    @Override
    public CastOptions getCastOptions(Context context) {
        Class expandedControllerActivity = BitmovinCastManager.getInstance().getCastControllerActivityClass();
        String expandedControllerActivityName = expandedControllerActivity != null ?
            expandedControllerActivity.getName() : null;

        LaunchOptions launchOptions = new LaunchOptions.Builder()
            .setRelaunchIfRunning(true)
            .build();

        return new CastOptions.Builder()
            .setReceiverApplicationId(BitmovinCastManager.getInstance().getApplicationId())
            .setCastMediaOptions(new CastMediaOptions.Builder().setMediaSessionEnabled(false).build())
            .setLaunchOptions(launchOptions)
            .build();
    }

    @Override
    public List<SessionProvider> getAdditionalSessionProviders(Context appContext) {
        return null;
    }
}
  1. Modify the AndroidManifest.xml to include the CustomCastOptionsProvider:
 <meta-data
            android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
            android:value="com.bitmovin.player.samples.casting.basic.CustomCastOptionsProvider" />
1 Like

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.