Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何打开和关闭GPS_Android_Gps_Geolocation - Fatal编程技术网

Android 如何打开和关闭GPS

Android 如何打开和关闭GPS,android,gps,geolocation,Android,Gps,Geolocation,这个问题已经被问了很多次,我发现了很多结果,但没有一个真的对我有帮助 使用以下代码打开GPS String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); Log.i("GPS IS ON", "GPS IS ON"+provider.contains("gps")); if(!provider.contains(

这个问题已经被问了很多次,我发现了很多结果,但没有一个真的对我有帮助

使用以下代码打开GPS

String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
Log.i("GPS IS ON", "GPS IS ON"+provider.contains("gps"));           

if(!provider.contains("gps")){ //if gps is disabled

        Log.i("GPS IS ON", "GPS IS ON");

        final Intent poke = new Intent();
        poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3")); 
        sendBroadcast(poke);
    }
并关闭:

String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

        if(provider.contains("gps")){ //if gps is enabled
            final Intent poke = new Intent();
            poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
            poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
            poke.setData(Uri.parse("3")); 
            sendBroadcast(poke);
        }

我在两次不同的点击中调用这两种不同的方法。它应该自动打开设备上的GPS,但它不工作

我甚至添加了以下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
}


我已经使用了这段代码,但如果没有互联网,它似乎无法在GPS关闭的情况下工作。

我认为用户无法从任何应用程序更改用户的个人电话设置(如GPS打开-关闭、声音打开-关闭、显示等)。这将是安全之眼

在我看来,这里唯一的选择是检查GPS是否打开或关闭,并将用户重定向到设置屏幕

LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        showPopupToRedirectToSettings();
    }
通过使用以下意图,您可以启动设置屏幕:


注意:如果您同时使用网络\u提供商和GPS\u提供商,则只需要请求访问\u精细\u位置权限,因为它包括两个提供商的权限。(访问位置的权限仅包括对网络提供商的权限。)

反对投票的原因是什么?“它应该自动打开设备上的GPS,但它不工作”——这一特定的安全漏洞多年前就已修补。“我甚至添加了这些权限”--它们与启用和禁用GPS无关。“那么,还有什么办法呢?”——希望没有。出于隐私原因,用户(而非应用程序)控制是否启用GPS。@Commonware谢谢,我正在尝试使用latitude和logititude获取用户(城市)的当前位置。我将如何获得这些值?我也需要互联网许可吗?“我将如何获取值?”--使用
LocationManager
requestLocationUpdates()
。“我也需要互联网许可吗?”--你不应该。“似乎如果互联网不在那里,它在GPS关闭的情况下无法工作”--对不起,在我之前的评论中,我假设你正在寻找GPS。如果GPS被禁用,并且您正在使用网络提供商,则设备可能需要访问互联网才能找到位置。我不知道你是否需要
互联网
许可才能工作——我所有与地点相关的工作都是基于其他原因需要
互联网
许可的应用程序,因此我没有在没有它的情况下尝试过地点访问。“访问地点的许可只包括对网络提供商的许可”至少有几年没有这样了。如果您只持有
ACCESS\u Rough\u LOCATION
,尝试从GPS获取数据将导致数据“模糊”,因此其精度仅与城市街区相当。
LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        showPopupToRedirectToSettings();
    }
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));