为什么我这样问:(也是在应用程序中尝试它的原因)
当我们在Lollipop中使用Google地图时会发生这种情况.即使位置已禁用,也会在用户从地图应用输入后以高精度模式打开,而无需访问"设置".
可以实现类似的功能以启用蓝牙,其中操作在我的应用程序中启动; 用户需要做出选择,但用户不会重定向到"设置",使用:
startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));
哪个可以在BluetoothAdapter上找到,现在我们知道没有LocationAdapter,所以我环顾了gms-> LocationServices,基本上几乎所有的位置API引用,android.location.LocationManager,但似乎没有任何像ACTION_REQUEST_ENABLE现在可用.
希望有相同的其他方法,更多人尝试过.
请注意:
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));不起作用.
android android-location google-play-services android-settings android-5.0-lollipop
我在Android 2.3.7上,我正在尝试编写一个BroadcastReceiver,当用户打开/关闭GPS时(例如:通过点击选项中的"使用GPS卫星")将调用它.
到目前为止我所做的是:
1)创建了以下broadcastReceiver:
public class GPSStatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
Toast.makeText(arg0, "Broadcast received!", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
2)将其添加到标签内的android清单中:
<receiver android:name=".GPSStatusBroadcastReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
现在问题在于它似乎不可靠.当我打开GPS/ff时onReceive()方法有时只运行(我会说1次超时3),其他时候它不会被调用.
我想知道是否有可靠的方法来检测GPS何时关闭/打开.
如果没有,那么至少在没有应用程序使用GPS anymoer时通知会很高兴(例如:当gps图标从状态栏消失时,表示没有人正在主动定位).
编辑:澄清:我的应用程序运行时我不想这样做.我只是在我的应用程序启动时打开/关闭gps,做它的事情然后终止,我不想订阅LocationsUpdates ...
我SettingsClient在一个应用上使用谷歌。它工作正常,但有些用户无法使用 GPS,即使他们打开了定位并且他们已经授予了定位权限。据我了解,如果在其上Settings Client返回RESOLUTION_REQUIREDFailureListener,那是因为用户已禁用位置。
真的吗?或者是否有任何其他原因返回RESOLUTION_REQUIRED?
当RESOLUTION_REQUIRED返回时,状态栏上没有显示 GPS 图标,但它应该在那里!
这是我的代码:
SettingsClient mSettingsClient =
LocationServices.getSettingsClient(context);
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL_MS);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL_MS);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationSettingsRequest.Builder builder = new
LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
mLocationSettingsRequest = builder.build();
mSettingsClient.checkLocationSettings(mLocationSettingsRequest)
.addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
connected = true;
// Fused Location code...
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
connected = false;
gpsFailureMessage = e.getMessage();
}
});
Run Code Online (Sandbox Code Playgroud)