我的应用程序中有代码可以检测Wi-Fi是否已主动连接.如果启用了飞行模式,该代码会触发RuntimeException.无论如何,我想在此模式下显示单独的错误消息.如何可靠地检测Android设备是否处于飞行模式?
我正在研究与地图相关的android应用程序,我需要在客户端开发中检查位置访问是否启用,如果未启用位置服务则显示对话框提示.
如何在android中以编程方式启用"位置访问"?
根据Android文档:
Google位置服务API是Google Play服务的一部分,它提供了一个功能更强大的高级框架,可自动处理位置提供程序,用户移动和位置准确性,而不是平台位置API
android.location.
但是使用融合位置提供程序(来自Google Play服务中的位置API)我不知道如何检查用户是否启用了位置或禁用了位置.
使用旧的 android.location很容易:
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Run Code Online (Sandbox Code Playgroud)
但我不想同时使用Google Play服务融合位置提供商和旧的 Android位置.
如何检查用户是否使用融合位置提供程序启用了该位置?
提前致谢.
android location android-location google-play-services fusedlocationproviderapi
试过这个:
String locationProviders = Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
Log.d(TAG_MAP, locationProviders);
Run Code Online (Sandbox Code Playgroud)
输出是:gps,网络
API 18及以下的手机是否具有HIGH_ACCURACY优先级?
我正在开发一个可用于监控Android设备上的地理围栏的库.我注意到,我在设备设置中关闭并重新启用了位置服务后,我在Google Play位置服务GeofencingApi类中注册的地理围栏会丢失.
我见过人们建议我需要android.location.PROVIDERS_CHANGED在我的AndroidManifest.xml文件中注册广播接收器.我已经这样做了 - 但是当我在测试应用程序中添加和删除测试提供程序时,只会调用此广播接收器.在设备设置中切换位置服务时,我根本不接收它.
难道我做错了什么?有谁知道如何可靠地确定用户何时在设备设置中切换位置服务?我希望能够在后台看到这些事件 - 即使我的应用程序没有运行.
我想我可以设置一个在后台运行的重复任务,并定期检查是否已切换位置服务,但这听起来很粗糙,效率低下.
如果它有帮助,我正在测试运行Android 4.4.2的Moto G.我对地理围栏所做的一切工作到目前为止一直很好.
编辑:经过更多的研究后,我发现PROVIDERS_CHANGED广播的行为变化很大,具体取决于手机版本和型号.运行Android 5.1的我的Nexus 5似乎工作得很好 - 我能够PROVIDERS_CHANGED定期收听广播.我还有一台运行4.4.x的Moto G和Moto X手机,他们从未PROVIDERS_CHANGED为我制作过该广播.Android 4.2上的三星Galaxy S3会为我制作广播,但在我将Map活动与测试位置提供商一起使用后就停止了.
无论如何,我现在决定停止追求这个问题.我认为Android只是个错误.
Google FusedLocationProviderApifor Android最近在过去几个月内被弃用,FusedLocationProviderClient作为其继任者,因此我最近更新了客户端应用中使用的位置API以使用新的API.
每次onLocationAvailability被触发时LocationCallback我都会在locationAvailability.isLocationAvailable()返回时通知用户false,但看起来这种情况比我在某些设备上预期的更频繁.我在前台内运行这些位置更新Service,这些位置更新保持一致至关重要.有没有办法确定这种失败的原因
在我看来,被弃用的API提供了对这些问题的更多洞察,因为它与它一起使用GoogleApiClient或者我可能缺少一些较小的细节.
在我进入基于位置的模式之前,我通过调用检查是否存在任何位置提供者
List<String> android.location.LocationManager.getProviders(boolean enabledOnly) //enabledOnly = true
Run Code Online (Sandbox Code Playgroud)
并检查结果列表的大小.
现在我在Android 2.2的HTC Desire上测试了我的应用程序.系统设置不允许任何位置跟踪(GPS和移动设备已关闭).
但是,返回的列表有1个条目,其值为"被动".它是什么?我可以使用它吗?提供者似乎很慢/不工作.
我正在开发一款使用Google Play服务的应用.在某些手机上,客户端为位置返回null.发生这种情况是因为在Google设置中未启用locaiton选项,如附带的图片中所示.
如何编程检查Android应用程序中是否启用了谷歌设置位置?
http://www.cnet.com/how-to/explaining-the-google-settings-icon-on-your-android-device/
我正在我的应用程序中使用LocationServices。在使用位置服务之前,我尝试验证具有所需设置的位置是否已打开,但我面临的问题SettingsClient.checkSettings始终是failing。请参阅我LocationRequest和LocationSettingRequest建造者:
位置请求
mLocationRequest = LocationRequest()
mLocationRequest.interval = interval
mLocationRequest.fastestInterval = interval
Log.v(TAG, "distance => $distance")
if(distance > 0) {
mLocationRequest.smallestDisplacement = distance
}
mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
buildLocationSettingsRequest()
Run Code Online (Sandbox Code Playgroud)
位置设置RequestBuilder
private fun buildLocationSettingsRequest() {
val builder = LocationSettingsRequest.Builder()
builder.addLocationRequest(mLocationRequest)
mLocationSettingsRequest = builder.build()
mSettingsClientInit = true
}
Run Code Online (Sandbox Code Playgroud)
我checkSettings要求
mSettingsClient.checkLocationSettings(mLocationSettingsRequest)
.addOnSuccessListener(this, object : OnSuccessListener<LocationSettingsResponse> {
override fun onSuccess(locationSettingsResponse: LocationSettingsResponse) {
Log.i(TAG, "LocationManager: All location settings are satisfied.");
mLocationCallback?.let {
fusedLocationClient?.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper()); …Run Code Online (Sandbox Code Playgroud) 作为一个新手到Android编程,我试图让使用WifiManager的SSID列表getScanResults()的方法,但它仍然是空的,即使我已经授予它的ACCESS_COARSE_LOCATION权限,以及对CHANGE_WIFI_STATE(对于startScan()方法),无论是在清单,并通过检查/在运行时请求它。
在 的广播接收器中SCAN_RESULTS_AVAILABLE_ACTION,我什至用键检查意图的额外字段,EXTRA_RESULTS_UPDATED结果返回true。
然而,list.size()总是返回 0。
我在这里缺少什么?我正在 Android 7.0 API 24 设备上进行测试。
编辑:代码如下:
主活动.java:
public class MainActivity extends Activity implements View.OnClickListener {
private static final String TAG="WiFiDemo";
WifiManager wifiManager;
WifiBroadcastReceiver wifiReceiver;
TextView textView;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState)
{
Log.d(TAG, "onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Check for permissions
if ((ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED)
|| (ContextCompat.checkSelfPermission(this, Manifest.permission.CHANGE_WIFI_STATE)
!= PackageManager.PERMISSION_GRANTED))
{
Log.d(TAG, "Requesting permissions");
//Request permission
ActivityCompat.requestPermissions(this,
new …Run Code Online (Sandbox Code Playgroud) 我正在使用 Android 地理围栏 API。添加地理围栏后,当位置打开时,它工作正常。但是如果我关闭位置并再次打开,之后进入或退出时地理围栏不会触发。我已经在使用 Android 5.0.2 设备的 Moto G 上进行了测试。如果位置关闭,地理围栏是否会过期?
我在 Android 文档中看到,
如果用户禁用网络位置提供程序,地理围栏服务将停止更新,所有注册的地理围栏将被删除,并由提供的待处理意图生成意图。在这种情况下,从此意图创建的 GeofencingEvent 表示错误事件,其中 hasError() 返回 true,而 getErrorCode() 返回 GEOFENCE_NOT_AVAILABLE。
如果用户在android中关闭了位置,我如何识别?我还想显示一个对话框以转到设置。