Android P ie (9.0) - Написание функции выключения или перезапуска - Приложение привилегировано - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть система безопасности в школах, где мои планшеты являются консолями для каждого класса. Я заметил, что учителя и администратор не перезагружают планшеты очень часто (или никогда), что вызывает проблемы. Я хотел бы взять задачу от клиентов и запрограммировать еженедельную перезагрузку или выключение. Я сделал несколько шагов в правильном направлении:

У меня есть:

  1. Разговор с провайдером / провайдером планшетов, и они добавили мое приложение в качестве привилегированного приложения.
  2. Добавлен белый список для (как мне кажется,) всех необходимых разрешений.
  3. Подтверждение наличия прав.

Код для проверки разрешений:

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));
    }
}

Ниже сообщается в журнале. Зеленые разрешения - это все, что я мог получить на своем личном телефоне. Желтые разрешения - это то, что я смог получить, кроме того, из белого списка провайдера планшета. Этими разрешениями мы можем подтвердить, что у меня есть привилегированное приложение, а также разрешения на отключение и перезагрузку.

enter image description here

Мне удалось найти раздел кода для закрытия приложения, но, похоже, я не могу понять, как его использовать. Ниже приведен код, который я пробовал, и ошибка следует:

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);

Ошибка при запуске кода:

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

"Это исключение выдается, когда вызывается Context # startActivity или один его вариантов не удается, потому что не удается найти действие для выполнения данного намерения. "

Я предполагаю, что это может потребовать от меня изменить мой манифест. xml, это правильно? Если это так, я не уверен, как это сделать. Я чувствую, что мне, возможно, придется добавить к моей основной деятельности, где сделан звонок. Однако я попробовал это, и это не сработало, или я написал код неправильно.

Заранее благодарю за любую помощь!

1 Ответ

0 голосов
/ 26 апреля 2020

понял это. Я не осознавал, что PowerManager существует, но он есть, и он работает. Мое решение ниже. Кроме того, если вы не прочитали полный вопрос, мое приложение является привилегированным / системным приложением, которое дает мне полномочия по управлению питанием. Обычные приложения не смогут сделать это.

В настоящее время работает Android 9.0 (может иметь значение, не уверен)

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();
}
...