检测位置设置何时可用(例如:记录其使用时间等)?
Detecting WHEN the Location Setting becomes available (ex: to log it's use time, etc)?
Android-奥利奥基本上破坏了我的应用程序,让我死在水里..
我的 Objective: 运行 在后台,并在 "Location" 设置打开时做出反应。
我 不需要 实际 使用 位置 - 我只需要 检测何时 它可用。
(不幸的是,从 Android-O 开始,我不能再使用 providers_changed 意图过滤器来执行此操作)。
我该怎么做?非常感谢您的建议!
解决方案:
动态注册您的 BroadcastReceiver
(从您的代码中),而不是从清单中。此外,您应该使用 LocationManager.PROVIDERS_CHANGED_ACTION
(以及当然导入 LocationManager
).
示例:
public void buttonClick(View view) {
IntentFilter filter = new IntentFilter();
filter.addAction("android.location.PROVIDERS_CHANGED");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches(LocationManager.PROVIDERS_CHANGED_ACTION)) {
Log.i(TAG, "Action MATCHES LocationManager.PROVIDERS_CHANGED_ACTION!");
}
}
};
this.getApplicationContext().registerReceiver(receiver, filter);
Log.i(TAG, "RECEIVER HAS BEEN REGISTERED");
}
请记住在您的代码中适当地注销 接收器,因为即使在用户按下后退按钮或主页按钮后,它确实会在后台继续运行。它唯一会停止接收的情况是用户通过多任务按钮将其终止,或强制停止它。
Android-奥利奥基本上破坏了我的应用程序,让我死在水里..
我的 Objective: 运行 在后台,并在 "Location" 设置打开时做出反应。
我 不需要 实际 使用 位置 - 我只需要 检测何时 它可用。
(不幸的是,从 Android-O 开始,我不能再使用 providers_changed 意图过滤器来执行此操作)。
我该怎么做?非常感谢您的建议!
解决方案:
动态注册您的 BroadcastReceiver
(从您的代码中),而不是从清单中。此外,您应该使用 LocationManager.PROVIDERS_CHANGED_ACTION
(以及当然导入 LocationManager
).
示例:
public void buttonClick(View view) {
IntentFilter filter = new IntentFilter();
filter.addAction("android.location.PROVIDERS_CHANGED");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches(LocationManager.PROVIDERS_CHANGED_ACTION)) {
Log.i(TAG, "Action MATCHES LocationManager.PROVIDERS_CHANGED_ACTION!");
}
}
};
this.getApplicationContext().registerReceiver(receiver, filter);
Log.i(TAG, "RECEIVER HAS BEEN REGISTERED");
}
请记住在您的代码中适当地注销 接收器,因为即使在用户按下后退按钮或主页按钮后,它确实会在后台继续运行。它唯一会停止接收的情况是用户通过多任务按钮将其终止,或强制停止它。