Work around for Broadcast receiver not working in Chinese mobiles

If you're having trouble with your Android app not responding to certain events in Mi, Oppo, Vivo or Letv devices it's not your fault.
This could include and is not limited to, service app not working properly, push notifications not working properly, application not opening up when intended. 
It is because of the extensive battery saver and the so-called saving the user from apps spamming their activity.

Here's the funniest part about it

We wrote to someone very senior at Xiaomi. He reverted that they manually whitelist a few apps, and the rest are by default disallowed from accessing the notifications folder. This was the response. "This usually happens because of whitelisting of apps that can access notifications folder. This is a feature to ensure the user is protected from spam and also helps to ensure RAM/battery usage optimization." We asked what the process was to get an app whitelisted, and did not get a response.  

This is coming from a post about GCM push notifications not working on Mi devices here.
https://stackoverflow.com/questions/40814126/gcm-push-notifications-for-android-devices-are-not-working-on-mi-and-letv-mobile/40932178#40932178

Funny because Chinese mobile manufacturers like Xiaomi, Oppo and Vivo first flood their phones with bloatware nobody asks for and even shove their useless articles and sponsored apps to users and here we see them talking about how they want to protect the user from spam and RAM and battery consumption.

The only solution is to get extensive permissions from the user which will be done manually and cannot be programmed for easiness.
What all permissions?
First, we need a permission to auto-start the application and then the permission to display pop-up window. 
App Settings > Permissions > Auto-Start
App Settings > Other Permissions > Display Pop-up

The most convenient workaround is to ask the user to manually permit these setting and open the settings page for the end-user.
This can be done by making a settings button that opens up the settings page.

settings = (Button)findViewById(R.id.settings);
settings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", getPackageName(), null);
                intent.setData(uri);
                startActivity(intent);
            }
        });

Useful links if you'd like to explore more.


Comments