Android Pie (9.0) - 编写关闭或重启函数 - 应用程序具有特权
Android Pie (9.0) - Writing a Shutdown or Restart Function - Application is Privileged
我在学校有一个安全系统,我的平板电脑是每个教室的控制台。我注意到老师和管理员不会经常(或从来没有)重启平板电脑,这导致了问题。我想从客户那里接过任务并计划每周重启或关机。我已经朝着正确的方向采取了一些步骤:
我有:
- 与平板电脑 Provider/Scheme 提供商交谈,他们已将我的应用程序添加为特权应用程序。
- 为(我认为的)所有必需权限添加了白名单。
- 确认权限存在。
检查权限的代码:
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));
}
}
以下是日志报告的内容。绿色权限是我个人能拿到的全部phone。黄色权限是我能够从平板电脑提供商的白名单中获得的权限。我们可以通过这些权限确认我有一个特权应用程序,以及关机和重启权限。
我找到了一段代码来关闭应用程序,但我似乎不太明白如何使用它。下面是我试过的代码,错误如下:
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) }
"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."
我假设这可能需要我修改我的 manifist.xml,对吗?如果是这样,我不确定该怎么做。我觉得我可能必须在我的主要 activity 中添加一个调用。不过,我试过了,还是不行,或者是我代码写的不对。
提前感谢您的帮助!
想通了这一点。我没有意识到 PowerManager 的存在,但它确实存在,而且可以正常工作。我的解决方案如下。另外,如果您没有阅读完整的问题,我的应用程序是 privileged/System 应用程序,它赋予我管理电源的权限。普通应用程序将无法执行此操作。
目前 运行 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();
}
我在学校有一个安全系统,我的平板电脑是每个教室的控制台。我注意到老师和管理员不会经常(或从来没有)重启平板电脑,这导致了问题。我想从客户那里接过任务并计划每周重启或关机。我已经朝着正确的方向采取了一些步骤:
我有:
- 与平板电脑 Provider/Scheme 提供商交谈,他们已将我的应用程序添加为特权应用程序。
- 为(我认为的)所有必需权限添加了白名单。
- 确认权限存在。
检查权限的代码:
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));
}
}
以下是日志报告的内容。绿色权限是我个人能拿到的全部phone。黄色权限是我能够从平板电脑提供商的白名单中获得的权限。我们可以通过这些权限确认我有一个特权应用程序,以及关机和重启权限。
我找到了一段代码来关闭应用程序,但我似乎不太明白如何使用它。下面是我试过的代码,错误如下:
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) }
"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."
我假设这可能需要我修改我的 manifist.xml,对吗?如果是这样,我不确定该怎么做。我觉得我可能必须在我的主要 activity 中添加一个调用。不过,我试过了,还是不行,或者是我代码写的不对。
提前感谢您的帮助!
想通了这一点。我没有意识到 PowerManager 的存在,但它确实存在,而且可以正常工作。我的解决方案如下。另外,如果您没有阅读完整的问题,我的应用程序是 privileged/System 应用程序,它赋予我管理电源的权限。普通应用程序将无法执行此操作。
目前 运行 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();
}