Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Open Android System Settings from Unity Android App

I am trying to open the System Settings from my Unity Android app, but I am receiving the following error:

UnityEngine.AndroidJavaException: android.content.ActivityNotFoundException: No Activity found to handle Intent {act =android.settings.ACTION_SETTINGS cat=[android.intent.category.DEFAULT] dat=package:com.xxx.xxxxx flg=0x10000000}

Here is my code:

try
{
    using (var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    using (AndroidJavaObject currentActivityObject = unityClass.GetStatic<AndroidJavaObject>("currentActivity"))
    {
        string packageName = currentActivityObject.Call<string>("getPackageName");

        using (var uriClass = new AndroidJavaClass("android.net.Uri"))
        using (AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("fromParts", "package", packageName, null))
        using (var intentObject = new AndroidJavaObject("android.content.Intent", "android.settings.ACTION_SETTINGS", uriObject))
        {
            intentObject.Call<AndroidJavaObject>("addCategory", "android.intent.category.DEFAULT");
            intentObject.Call<AndroidJavaObject>("setFlags", 0x10000000);
            currentActivityObject.Call("startActivity", intentObject);
        }
    }
}
catch (Exception e)
{
    Debug.Log(e);
}
like image 793
Junaid Pathan Avatar asked Nov 06 '22 20:11

Junaid Pathan


2 Answers

This works for me on Android 10

before: android.intent.category.DEFAULT

after: android.intent.category.APPLICATION_DETAILS_SETTINGS

using var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
using AndroidJavaObject currentActivityObject = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
string packageName = currentActivityObject.Call<string>("getPackageName");
using var uriClass = new AndroidJavaClass("android.net.Uri");
using AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("fromParts", "package", packageName, null);
using var intentObject = new AndroidJavaObject("android.content.Intent", "android.settings.APPLICATION_DETAILS_SETTINGS", uriObject);
intentObject.Call<AndroidJavaObject>("addCategory", "android.intent.category.DEFAULT");
intentObject.Call<AndroidJavaObject>("setFlags", 0x10000000);
currentActivityObject.Call("startActivity", intentObject);
like image 135
Jonathan Bro Avatar answered Nov 14 '22 22:11

Jonathan Bro


(Remove ACTION_)changed:android.settings.SETTINGS

like image 32
qianlan cao Avatar answered Nov 14 '22 22:11

qianlan cao