如何在源代码中重新启动SystemUI而无需重启设备?
我正在尝试在不重启设备的情况下切换系统字体,除了SystemUI之外一切正常。我希望立即重新启动SystemUI而不是重启设备。
谢谢~~~
如何在源代码中重新启动SystemUI而无需重启设备?
我正在尝试在不重启设备的情况下切换系统字体,除了SystemUI之外一切正常。我希望立即重新启动SystemUI而不是重启设备。
谢谢~~~
从任何你想要休息UI的地方调用以下方法
private void restartSelf() {
AlarmManager am = (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + 500, // one second
PendingIntent.getActivity(getActivity(), 0, getActivity().getIntent(), PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_CANCEL_CURRENT));
Intent i = getActivity().getBaseContext().getPackageManager().getLaunchIntentForPackage(getActivity().getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
private void restartSystemUi() {
Process process = null;
try {
process = Runtime.getRuntime().exec("su");
} catch (IOException e) {
Log.e(TAG, "Error retrieving process", e);
}
if (process != null ){
try {
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("pkill com.android.systemui\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();
} catch (Exception e) {
Log.e(TAG, "Error killing system UI", e);
}
}
}
像任何根操作一样,你的里程可能会有所不同。如果没有root权限是不可能的,因此这是你唯一的选择(或类似的特权滥用)。
这是因为系统在启动后创建了SystemUI,并且它将一直存在,直到系统重新启动。而SystemUI中的某些配置是Singleton,被不同部分使用,如volumeUI等。因此,唯一的方法是强制结束它。但是,要做到这一点,您需要访问根级别。