ilw*_*ilw 12 android dialog root
如何检查dialogAndroid中是否显示任何系统(如下面的系统或USSD)?
编程方式还是cmd root方式?任何变种.
理论上你可以使用AccessibilityService,但它相当复杂,并且可能在不同的设备上工作,也可能不工作。用户需要手动为您的应用程序启用辅助功能。每当打开任何窗口时,您都可以从 Android 获取回调,然后您可以询问该窗口以确定它是否包含特定文本或属于特定包等。这是一种“强力”方法,但它可能很有用在某些情况下。
系统对话框是一个活动。您可以使用ActivityManager通过顶级活动类名称来检测它。
final ActivityManager manager = (ActivityManager) context
.getSystemService(Activity.ACTIVITY_SERVICE);
Run Code Online (Sandbox Code Playgroud)
在 API 级别低于 23 (M) 的设备中:
final List<ActivityManager.RunningTaskInfo> runningTasks = manager.getRunningTasks(1);
final ComponentName componentName = runningTasks.get(0).topActivity;
final String className = componentName.getClassName();
if (className.equals("YOUR_EXPECTED_ACTIVITY_CLASS_NAME")) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
在较新的设备中:
final List<ActivityManager.AppTask> appTasks = manager.getAppTasks();
final ComponentName componentName = appTasks.get(0).getTaskInfo().topActivity;
final String className = componentName.getClassName();
if (className.equals("YOUR_EXPECTED_ACTIVITY_CLASS_NAME")) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
或者在这种情况下,您可以在开始活动之前检查设备是否处于飞行模式:
private boolean isAirplaneModeOn(final Context context) {
final int airplaneMode = Settings.System.getInt(
context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON,
0
);
return airplaneMode != 0;
}
...
if (!isAirplaneModeOn(this)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |