刷新Android SystemUI而无需重新启动

3

如何在源代码中重新启动SystemUI而无需重启设备?

我正在尝试在不重启设备的情况下切换系统字体,除了SystemUI之外一切正常。我希望立即重新启动SystemUI而不是重启设备。

谢谢~~~


此外,我正在修改Android源代码。重新启动SystemUI是可以的,但重新启动后会跳转到Keyguard。刷新systemui的视图是关键。 - Tiantian Kong
3个回答

1

从任何你想要休息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);  
}  

从您想要其余UI的位置调用上述方法。 - Haroon

1
需要 root 权限,但您可以通过以下方法重新启动系统 UI:
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权限是不可能的,因此这是你唯一的选择(或类似的特权滥用)。


0

这是因为系统在启动后创建了SystemUI,并且它将一直存在,直到系统重新启动。而SystemUI中的某些配置是Singleton,被不同部分使用,如volumeUI等。因此,唯一的方法是强制结束它。但是,要做到这一点,您需要访问根级别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接