为什么我问这个: (也是在应用中尝试它的原因)
当我们在Lollipop中使用 Google地图时,会发生。 即使位置已停用,也会在用户从地图应用输入后以高精度模式打开,而无需访问设置。
启用蓝牙可以实现类似的功能,其中操作在我的应用中启动;用户需要做出选择,但用户不会重定向到“设置”,使用:
startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));
可以在BluetoothAdapter上找到,现在我们知道没有LocationAdapter,所以我环顾了gms->LocationServices,基本上几乎所有事情都在Location API references,android.location.LocationManager下但是没有似乎有ACTION_REQUEST_ENABLE
之类的东西可用。
希望有相同的其他方法,更多人尝试过。
请注意:
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
不起作用。
答案 0 :(得分:22)
更新3 :
<强> Prompt the user to change location settings 强> 正如@patrickandroid,在评论中提到,第二次更新的链接已被破坏
<强> GoogleSamples; android Location and options - for code reference. 强>
更新2 :
<强> GoogleSamples; - for code reference. 强>
此示例基于此中包含的LocationUpdates示例构建 repo,并允许用户更新设备的位置设置 使用位置对话框。
使用SettingsApi确保设备的系统设置 根据应用的位置需求进行了正确配置。
更新1 :
Google Play services, Version 7.0 (March 2015) released...
位置设置 - 虽然FusedLocationProviderApi结合了多个传感器,为您提供最佳位置,但准确性 您的应用收到的位置仍然很大程度上取决于设置 在设备上启用(GPS,wifi,飞行模式等)。运用 在新的SettingsApi类中,您可以打开一个“位置设置”对话框 它显示一键式控件,供用户更改其设置 没有离开你的应用程序。
使用 public interface SettingsApi
- 确定设备上是否启用了相关的系统设置以执行所需的位置请求。
- (可选)调用一个对话框,允许用户通过单击启用必要的位置设置。
离开前一部分作为参考:
的 更新/应答 强>
对于每个寻找此答案的人, Google Play Services 7.0
它添加了用于检测地点和连接到附近设备的API,改进了移动广告,健身数据,位置设置等
在Google Play服务7.0中,我们引入了一种标准机制 检查是否为给定项启用了必要的位置设置 LocationRequest成功。如果有可能的改进,你 可以显示单触控件,供用户更改其设置 没有离开你的应用程序。
此API为更好的用户提供了一个很好的机会 经验,特别是如果位置信息对于 您的应用的用户体验,例如Google地图的情况 他们整合了“位置设置”对话框并看到了戏剧性 在良好的位置状态下增加用户数量。
来源: Android developers blog: Google Play services 7.0 - Places Everyone!
SDK即将推出!
我们将推出Google Play服务7.0 接下来的几天。预计此博客文章的更新已发布 文档以及推出后SDK的可用性 完成。
将在实施后更新程序化的l-o-c
答案 1 :(得分:20)
根据上面的@ user2450263说明,这里有一些片段,
/**
* Prompt user to enable GPS and Location Services
* @param mGoogleApiClient
* @param activity
*/
public static void locationChecker(GoogleApiClient mGoogleApiClient, final Activity activity) {
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(30 * 1000);
locationRequest.setFastestInterval(5 * 1000);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest);
builder.setAlwaysShow(true);
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult result) {
final Status status = result.getStatus();
final LocationSettingsStates state = result.getLocationSettingsStates();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location
// requests here.
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the user
// a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
status.startResolutionForResult(
activity, 1000);
} catch (IntentSender.SendIntentException e) {
// Ignore the error.
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the dialog.
break;
}
}
});
}
并使用它,
mGoogleApiClient = new GoogleApiClient
.Builder(this)
.enableAutoManage(this, 34992, this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
locationChecker(mGoogleApiClient, MyActivity.this);
基本上,您的用户会得到这样的提示,他们可以在高精度模式下启用位置而无需进入设置
答案 2 :(得分:0)
我有解决方案,在Android 6.0.1 Marshmallow上测试,在按钮事件OnClick
上调用void:
private void openGPSSettings() {
//Get GPS now state (open or closed)
boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER);
if (gpsEnabled) {
Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 0);
} else {
Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 3);
}
}
Android需要启用USB调试或植根。在adb shell
中执行以下命令(如果设备未植根,则从设备上的根shell或通过USB连接的计算机执行):
pm grant com.example.application.test android.permission.WRITE_SECURE_SETTINGS
在应用清单中添加以下权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />