android - 在导航出设置时检测
问题描述
我正在开发具有辅助功能要求的应用程序。在我的 MainActivity 的 onCreate() 方法中,我每 10 秒调用一次服务检查可访问性是否打开,如果不是,它会发送到 Settings.ACTION_ACCESSIBILITY_SETTINGS 以请求启用。
问题是我需要找到一种方法(关闭辅助功能设置)来了解用户是否已导航出设置页面(例如按主页或返回按钮等),因为当您正要单击时这很烦人ON 按钮它会将您带回一般可访问性页面。
如果用户导航出去,我认为它可以在 onPause() 中完成,但我不知道如何覆盖设置的意图。
这是每 10 秒重复一次的整个课程:
public class AccessibilityWatcher extends Service {
private static final Intent sSettingsIntent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
private AlarmManager alarmMgr;
private AlarmReciever alarmReciever;
private PendingIntent pendingIntent;
private int AccessibilityCheckPeriod = 10000; //in miliseconds
public void onCreate() {
Log.d("tag", "Accessibility Watcher Created.");
sSettingsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
sSettingsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sSettingsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
goToSettings(sSettingsIntent);
//Setup alarm...
alarmReciever = new AlarmReciever();
IntentFilter filter = new IntentFilter("fire");
registerReceiver(alarmReciever, filter);
Intent dialogIntent = new Intent("fire");
alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
pendingIntent = PendingIntent.getBroadcast(this, 0, dialogIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar time = Calendar.getInstance();
Calendar cal_now = Calendar.getInstance();
Date date = new Date();
time.setTime(date);
cal_now.setTime(date);
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
Log.d("Alarm","Alarm set to " + time.getTimeInMillis());
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void goToSettings(Intent sSettingsIntent) {
Log.d("tag", "Send them to settings and display Toast!");
Toast.makeText(getApplicationContext(), "Enable access for '" + MainActivity.appName + "'", Toast.LENGTH_LONG).show();
startActivity(sSettingsIntent);
}
//Alarm recevier get and set new Time
class AlarmReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("CheckIntent", sSettingsIntent.toString());
if(!AccessibilityS.isEnabled) {
//Not Enabled - Set alarm and send to Settings
Calendar time = Calendar.getInstance();
Calendar cal_now = Calendar.getInstance();
Date date = new Date();
time.setTime(date);
cal_now.setTime(date);
time.set(Calendar.MILLISECOND, AccessibilityCheckPeriod); //Delay 10 seconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
} else {
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
}
Log.d("Alarm", "New alarm set: " + time.getTimeInMillis());
Log.i("Accessibility", "Checking permissions.... Result isEnabled is:" + AccessibilityS.isEnabled);
sSettingsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
sSettingsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sSettingsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
goToSettings(sSettingsIntent);
}
}
}
}
解决方案
推荐阅读
- javascript - 如何将期权日期设置为昨天今天和明天?
- javascript - JS如何从导入器文件夹导入文件,而不是所有者文件夹
- matplotlib - matplotlib.pyplot.plot 函数如何仅使用一个参数?
- java - 返回空的不可变集合而不是分配一个新的空集合有什么缺点?
- javascript - 如何使用 Web 浏览器检查器工具查看网站的 js 文件?
- visual-studio - 无法安装 Blazor 扩展
- ios - 是否可以使用 PDF 远程数据初始化 UIImage?
- reactjs - 加载像storm-react-diagrams这样的反应库
- javascript - React-Native:FlatList 滚动到索引显示错误未定义
- keras - __init__() 有一个意外的关键字参数“输入”