
Problem
The Ninox Android App (de.ninoxdb.ninox
) did not launch properly when added to Kiosk Mode via ManageEngine MDM. The app was correctly whitelisted, but it remained stuck on the splash screen before launching.
Since ManageEngine MDM does not support sending intents, a workaround was needed to automatically open Ninox when clicked.
Solution
A custom Android APK (NinoxLauncher
) was created to launch Ninox (de.ninoxdb.ninox.ui.main.home.ActivityHome
) when tapped.
Steps to Implement
1. Create a New Android Project
- Open Android Studio and create a new Empty Activity project.
- Set the package name to match the organization’s standard (
com.example.ninoxlauncher
orcom.zag1.ninoxlauncher
).
2. Modify AndroidManifest.xml
- Removed unnecessary permissions like
RECEIVE_BOOT_COMPLETED
since auto-start was not required. - Ensured
android:exported="true"
for Android 12+ compatibility. - Defined
MainActivity
as the launcher.
Final AndroidManifest.xml
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:label="Launch Ninox"
android:icon="@mipmap/ic_launcher"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity
android:name=".MainActivity"
android:label="Launch Ninox"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
3. Implement MainActivity.java
- The app launches Ninox as soon as it is clicked.
- The launcher closes itself after opening Ninox.
Final MainActivity.java
:
package com.example.ninoxlauncher;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent();
intent.setClassName("de.ninoxdb.ninox", "de.ninoxdb.ninox.ui.main.home.ActivityHome");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
}
4. Build and Sign the APK
- Ensured all Gradle tasks were loaded.
- Built the signed release APK:
./gradlew assembleRelease
- Located the APK in:
app/build/outputs/apk/release/app-release.apk
- Renamed it for clarity:
move "C:\Android_APK\NinoxLauncher\app\build\outputs\apk\release\app-release.apk" "C:\Android_APK\NinoxLauncher.apk"
5. Deploy via ManageEngine MDM
- Uploaded
NinoxLauncher.apk
as a custom enterprise app. - Assigned it to all required tablets in Kiosk Mode.
- Ensured Ninox was also whitelisted in Kiosk settings.
Result
The custom launcher now opens Ninox automatically when clicked.
The signed APK works with ManageEngine MDM deployment.
Conclusion
By using a lightweight launcher APK, the limitation of ManageEngine MDM not supporting direct intent launches was bypassed. This solution allows Ninox to work seamlessly in Kiosk Mode while keeping the deployment scalable across multiple tablets.
For similar custom solutions, contact Zag1 Productions.