Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Turn on Unknown Sources setting programmatically

I want to turn on Unknown Sources setting programmatically on non rooted device. I have checked with this code:

boolean success;
int result = Settings.Secure.getInt(getContentResolver(),
Settings.Secure.INSTALL_NON_MARKET_APPS, 0);
if (result == 0) {
    success = Settings.Secure.putString(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, "1");    
}

and with following permissions:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

but on executing, it says permission denied: writing to secure settings requires android.permission.WRITE_SECURE_SETTINGS which I already have given.

I have made this application with device admin permission.

like image 746
unflagged.destination Avatar asked Dec 19 '22 23:12

unflagged.destination


2 Answers

but on executing, it says permission denied: writing to secure settings requires android.permission.WRITE_SECURE_SETTINGS which I already have given.

You cannot hold that permission, unless you are signed by the same signing key that signed the firmware or if you were installed on the system partition (e.g., by a rooted device user).

I have made this application with device admin permission.

That has nothing to do with modifying secure settings programmatically.

like image 81
CommonsWare Avatar answered Dec 29 '22 13:12

CommonsWare


To do that you must have root. If your app is made for root users you can use the code above:

Process p = Runtime.getRuntime().exec("su");
    DataOutputStream os = new DataOutputStream(p.getOutputStream());
    os.writeBytes("settings put global install_non_market_apps 1");
    os.writeBytes("exit\n");
    os.flush();

But the problem is that it is not compatible with all android versions.

like image 34
Java Geek Avatar answered Dec 29 '22 14:12

Java Geek