Android Pie (9.0) - Writing a Shutdown or Restart Function - Application is Privileged

0

I have a security system in schools, where my tablets are the consoles for each classroom. I've noticed teachers and admin are not restarting the tablets very often (or ever), which has caused issues. I would like to take the task from the clients and program a weekly reboot or shutdown. I have taken a few steps in the right direction:

I have:

  1. Spoken with the Tablet Provider/Scheme Provider, and they have added my app as a privileged app.
  2. Added a whitelist for (what I think are) all required permissions.
  3. Confirmed the privileges exist.

Code to Check Permissions:

public void getGrantedPermissions(final String appPackage) {
    List<String> granted = new ArrayList<String>();
    try {
        PackageInfo pi = getPackageManager().getPackageInfo(appPackage, PackageManager.GET_PERMISSIONS);
        for (int i = 0; i < pi.requestedPermissions.length; i++) {
            if ((pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) {
                granted.add(pi.requestedPermissions[i]);
            }
        }
    } catch (Exception e) {}

    for(int i = 0; i < granted.size(); i++){
        Log.e("Permissions", granted.get(i));
    }
}

Below is what the log reported. The green permissions are all that I could get on my personal phone. The yellow permissions are what I was able to get, additionally, from the Tablet provider's whitelist. We can confirm by these permissions that I have a privileged app, as well as the shutdown and reboot permissions.

enter image description here

I was able to find a section of code to shutdown the app, but it seems that I can't quite figure out how to use it. Below is the code I have tried, and the error follows:

Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
intent.putExtra("android.intent.extra.KEY_CONFIRM", false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Error upon running code:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.ACTION_REQUEST_SHUTDOWN flg=0x10000000 (has extras) }

"This exception is thrown when a call to Context#startActivity or one of its variants fails because an Activity can not be found to execute the given Intent."

I am assuming that this may require me to modify my manifist.xml, is that correct? If so, I'm unsure how to do so. I feel that I may have to add an to my main activity, where the call is made. Though, I've tried this and it didn't work, or I wrote the code improperly.

Thank you in advance for any assistance!

android
android-studio
android-9.0-pie
asked on Stack Overflow Apr 23, 2020 by FoxDonut • edited Apr 23, 2020 by FoxDonut

1 Answer

0

Figured this one out. I didn't realize a PowerManager existed, but it does, and it works. My solution below. Also, if you didn't read the full question, my app is a privileged/System app, which gives me the authority to manage power. Normal apps will not be able to do this.

Currently running Android 9.0 (might matter, not sure)

try{
   PowerManager powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
   powerManager.reboot(null);
} catch (Exception e){
    Toast.makeText(this, "Error performing this action", Toast.LENGTH_LONG).show();
    e.printStackTrace();
}
answered on Stack Overflow Apr 26, 2020 by FoxDonut

User contributions licensed under CC BY-SA 3.0