检测位置设置何时可用(例如:记录其使用时间等)?

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");

}


请记住在您的代码中适当地注销 接收器,因为即使在用户按下后退按钮或主页按钮后,它确实会在后台继续运行。它唯一会停止接收的情况是用户通过多任务按钮将其终止,或强制停止它。