Wednesday, August 20, 2025

How to Create a Compliance Video for FOREGROUND_SERVICE_MEDIA_PLAYBACK Permission

When publishing a radio streaming app on Google Play, Google Play will flag your app because FOREGROUND_SERVICE_MEDIA_PLAYBACK is considered a restricted permission under Play Store policies. Apps that use it must clearly justify why they need it, since it allows your app to keep running in the foreground (and consume system resources) while playing media.

Why is this permission required?

You need to explain that your app streams audio content (radio) and requires a foreground service to keep audio playback active when the user minimizes the app, ensuring a seamless listening experience. Without this, playback would stop when the app is backgrounded.

Script for the Video Demonstration

Keep it clear and short (30–60 sec). Here’s the example script:

[Start Recording Screen]

  1. Launch your app from the home screen.

    • Narrate: “This is our radio streaming app.”

  2. Tap on a radio station to start playback.

    • Narrate: “I start a live radio stream.”

  3. Show the media notification appears at the top (with Play/Pause controls).

    • Narrate: “When the stream starts, a foreground notification with media controls is displayed as required by Google Play policies.”

  4. Press the Home button to minimize the app.

    • Narrate: “I minimize the app, and the audio continues to play.”

  5. Show the notification still visible and working (tap Play/Pause).

    • Narrate: “This foreground service keeps playback active so users can continue listening in the background.”

  6. Stop playback and show that the notification disappears.

    • Narrate: “When playback stops, the foreground service is removed.”

[End Recording]

Tips for Video

  • Record on a real device, not just an emulator.
  • Make sure audio from the radio is audible in the recording.
  • Show only the relevant steps (don’t browse menus too much).
  • Keep the video horizontal (landscape mode) if possible for better clarity.

Text for Play Console (Permission Declaration Form)

Copy this into the justification field:

Our app is a live radio streaming application. We use the FOREGROUND_SERVICE_MEDIA_PLAYBACK permission to enable continuous audio playback when the app is running in the background. This ensures that users can keep listening to live radio without interruptions while using other apps. The foreground service is only used for active media playback and displays a persistent media notification with playback controls in compliance with Google Play policies.

Sunday, July 13, 2025

How to fix AdMob Interstitial Ad Overlapping Status Bar?

When projects are targeted with SDK 35 or higher, an issue occurs where AdMob interstitial ads overlap the status bar when edge-to-edge display is enabled on Android, especially on Android 15 and above. This issue is common among many developers and is primarily caused by the way the AdMob SDK handles interstitial ad activity, which you as an app developer cannot directly control. The solution is to apply a Theme to AdActivity

Implementation:

1. Open res > values > styles.xml and add the following line of code:

<style name="AdInspectorActivityTheme" parent="@android:style/Theme.Translucent.NoTitleBar">
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
</style>


2. Open AndroidManifest.xml and add the following line of code:

<!--suppress AndroidDomInspection -->
<activity
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@style/AdInspectorActivityTheme"
tools:replace="android:theme"
tools:ignore="MissingClass" />


Monday, June 9, 2025

Ad Network Sdk Offline Integration

Solodroid project implements a multi ads system for ad network integration, we use third-party services github and jitpack to publish the library, when something undesirable happens, for example github or jitpack services are experiencing problems or are down, sometimes the project cannot be built, therefore, to solve the problem temporarily, you can integrate the ad network library offline.

Before integrating, click here to download the offline library.

Watch the video for integration:



Saturday, April 12, 2025

Notice Regarding Removal of Wortise Ads in our Ad Network SDK

We regret to inform you that the integration of Wortise ads across Solodroid items has been completely removed.

The integration of Wortise ads in our items is a result of our “Solodroid” partnership with the “Wortise Company”, as this partnership has ended and not renewed, we hereby officially stop supporting the integration of Wortise ads for all our items.

As such, Wortise ads are no longer available in new builds.

Alternatively, you can use other Ad Networks supported by our ad SDK such as: AdMob, Ad Manager, Meta Audience Network, AppLovin Max, AppLovin Discovery, Start.io, Unity Ads, ironSource.

If you still want to use Wortise, we provide customization services with direct and separate integration with our ad network sdk, if you are interested, you can contact us via email: help.solodroid@gmail.com

Other alternative ads integration customization options available: Pangle, Huawei Petal Ads, Yandex Ads, Bigo Ads, CAS.AI

Friday, March 14, 2025

Multi Ads Sdk

multi-ads-sdk: full integration with 9 ad networks. This library is suitable for those of you who want to use multiple ad networks from many vendors and to maximize the concept of switch ads and backup ads to switch between using other ad networks if one or several ad networks you use have problems. The apk/aab file size will be slightly larger due to more ad libraries are used.

Ad Network Support: AdMob, Google Ad Manager, Meta Audience Network, AppLovin Max, AppLovin Discovery, Start.io, Unity ads, ironSource, Wortise

Implementation:

1. Open build.gradle (Module: app) and change the implementation to multi-ads-sdk

implementation 'com.github.solodroid-dev:multi-ads-sdk:2.+'

2. Open settings.gradle (Project Settings) and update the dependencyResolutionManagement

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
maven { url 'https://android-sdk.is.com/' }
maven { url 'https://unity3ddist.jfrog.io/artifactory/unity-mediation-mvn-prod-local/' }
maven { url 'https://maven.wortise.com/artifactory/public' }
maven { url 'https://artifact.bytedance.com/repository/pangle' }
maven { url 'https://cboost.jfrog.io/artifactory/chartboost-ads/' }
maven { url 'https://maven.ogury.co' }
}
}

3. Sync Now and the project is ready to be built

Important: using multiple-ads-sdk there are some risks, your application or Google Play account may be removed or even suspended because there are potential ad networks sdk other than Google and Facebook such as AppLovin, Unity ads, Start.io, ironSource and Wortise may be against Google Play policy.

Saturday, October 12, 2024

How to Solve Warnings Cleartext traffic allowed for all domains?

The Cleartext traffic configuration is required for the app to run on http and https protocols, the cleartext traffic warning is not an error, but a warning which can be ignored.

But, if you want to solve or remove the warning, it's also can be removed, but with consequences and with note that the app will only run on https protocol, if you use http protocol, the content will not be able to be loaded from the server to the app.

To remove the warning, in the Android Studio project, open res/xml/network_config.xml, then, in the base-config cleartextTrafficPermitted configuration, change the value from true to false, by using false value, the warnings message will be disappear when you publish the app on Google Play.





Sunday, June 30, 2024

Single Ads Sdk

We offer a new option for Solodroid project users who want to monetize apps with certain ad networks as an alternative if AdMob experiences problems such as being restricted or even banned. In this case we use the single ads SDK format as a backup ad or even make it the main ad. By using a single ads SDK, the advertising SDK is used only on that ad network SDK so that the size of the aab/apk file when built is minimal or smaller and can minimize problems in publishing to the Google Play Store related to SDKs from other ad networks that may not or do not comply with policies.

Below are several single ads SDK implementation options that we have released and can be used.

Wortise Ads Sdk

1. Open build.gradle (Module: app) and change the implementation to wortise-ads-sdk

implementation 'com.github.solodroid-dev:wortise-ads-sdk:2.+'


2. Open settings.gradle (Project Settings) and update the dependencyResolutionManagement


dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
maven { url 'https://android-sdk.is.com/' }
maven { url 'https://unity3ddist.jfrog.io/artifactory/unity-mediation-mvn-prod-local/' }
maven { url 'https://maven.wortise.com/artifactory/public' }
maven { url 'https://artifact.bytedance.com/repository/pangle' }
maven { url 'https://cboost.jfrog.io/artifactory/chartboost-ads/' }
maven { url 'https://maven.ogury.co' }
maven { url 'https://developer.huawei.com/repo/' }
}
}

3. Sync Now and the project is ready to be built

For other ad network sdk implementation options, simply change the sdk name in the build.gradle file (Module: app)

AdMob Ads Sdk

implementation 'com.github.solodroid-dev:admob-ads-sdk:1.+'

Unity Ads Sdk

implementation 'com.github.solodroid-dev:unity-ads-sdk:1.+'