Check Root Access with Xamarin.Android
Hey today i want to share with you a simple method to check if the device has a Root Access its very useful if you want to use a low level resources from your android device
And here's the little class ExecuteAsRootBase.cs
using System;
using Java.Lang;
using System.Collections.Generic;
namespace RootAccess
{
public static class ExecuteAsRootBase
{
public static bool canRunRootCommands()
{
bool retval = false;
Process suProcess;
try
{
suProcess = Runtime.GetRuntime().Exec("su");
var os = new Java.IO.DataOutputStream(suProcess.OutputStream);
var osRes = new Java.IO.DataInputStream(suProcess.InputStream);
if (null != os && null != osRes)
{
os.WriteBytes("id\n");
os.Flush();
string currUid = osRes.ReadLine();
bool exitSu = false;
if (null == currUid)
{
retval = false;
exitSu = false;
Console.WriteLine("Can't get root access or denied by user");
}
else if (true == currUid.Contains("uid=0"))
{
retval = true;
exitSu = true;
Console.WriteLine("Root access granted");
}
else
{
retval = false;
exitSu = true;
Console.WriteLine("Root access rejected: " + currUid);
}
if (exitSu)
{
os.WriteBytes("exit\n");
os.Flush();
}
}
}
catch (Java.Lang.Exception e)
{
retval = false;
Console.WriteLine("Root access rejected [" + e.Class.Name + "] : " + e.Message);
}
return retval;
}
}
}
Now after this you can check the access with this code and also if are sure that you have root access now you can run low level unix commands:
bool rootaccess = ExecuteAsRootBase.canRunRootCommands();
if(rootaccess){
Java.Lang.Runtime.GetRuntime().Exec ("su -c" + "command to exec");
}
Theres is all for today you access to the full code source at my github:
https://github.com/AlejandroRuiz/Mono/tree/master/RootAccess
Happy Code



Hi Author just now i found your blog its really awesome. Keep this work. It will more helpful for xamarin app developers.
ResponderEliminarHire affordable Xamarin Developer