我正在 Xiaomi Mi 9T Android 10 API 29 上测试我的 Android 应用程序。
流程如下:
在我的辅助功能活动中,我启动辅助功能系统意图
意图打开设置活动,我需要再深入 2 个子设置,直到我可以启用权限
在我的 Accessibility Activity 中有一个计时器,它会一直监视直到授予权限:
public void timerStart() {
this.timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (isAccessibilityEnabled()) {
Accessibility.this.timer.cancel();
//Execution passes through here, but ActivityB never starts
Intent intent = new Intent(Accessibility.this, ActivityB.class);
context.startActivity(intent);
return;
}
}
}, 0, 500);
}
我做了一个测试。我也尝试打开一个对话框而不是一个活动,但也没有任何反应。
public void timerStart() {
this.timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (isAccessibilityEnabled()) {
Accessibility.this.timer.cancel();
//Execution passes through here, but the Dialog is never opened
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
new AlertDialog.Builder(Accessibility.this)
.setMessage("Teste")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}})
.show();
}
});
return;
}
}
}, 0, 500);
}
我又做了一个测试。我在计时器的运行方法中运行了下面的代码,并验证了顶级 Activity 是 com.android.settings.SubSettings。 所以它得出的结论是我无法从 SubSettings 开始任何事情
public void timerStart() {
this.timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if (isAccessibilityEnabled()) {
Accessibility.this.timer.cancel();
ActivityManager mngr = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(0);
for (ActivityManager.RunningTaskInfo info : taskList) {
Log.i(TAG, "############################################");
Log.i(TAG, "info.numActivities: " + info.numActivities);
Log.i(TAG, "info.numActivities: " + info.numActivities);
Log.i(TAG, "info.baseActivity: " + info.baseActivity.getClassName());
Log.i(TAG, "info.topActivity: " + info.topActivity.getClassName());
}
return;
}
}
}, 0, 500);
}
控制台输出:
I/Accessibility: ############################################
I/Accessibility: info.numActivities: 4
I/Accessibility: info.baseActivity: com.myapp.android.activity.Accessibility
I/Accessibility: info.topActivity: com.android.settings.SubSettings
I/Accessibility: ############################################
I/Accessibility: info.numActivities: 1
I/Accessibility: info.baseActivity: com.miui.home.launcher.Launcher
I/Accessibility: info.topActivity: com.miui.home.launcher.Launcher
计时器的运行方法内部可能发生了什么,它阻止了任何 Activity 或任何 Dialog 打开?
非常感谢