Android gps以编程方式打开和关闭

标签 android gps

我写了一个简单的 gps 代码,它在某些设备(比如 moto g)中以编程方式打开和关闭 gps,但一些旧版本或 Samsung duos 和其他一些设备它没有以编程方式打开 gps。 请帮我解决这个问题,

如果gps开启成功我会得到纬度和经度,所以我会用它

提前致谢

You have to decrease your API level from Manifest File

最佳答案

请根据您的要求进行更改。

关闭 GPS

    private void turnGPSOn() 
{

    String provider = android.provider.Settings.Secure.getString(getContentResolver(),android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if (!provider.contains("gps")) 
    { 
        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 并获取 Lat Long

此代码用于停止 gps

LocationUtil locationUtil = new LocationUtil(getApplicationContext());
                        locationUtil.stopUsingGPS();
 if (statusOfGPS) {

         Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
         intent.putExtra("enabled", false);
         sendBroadcast(intent);
    }

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

经纬度

public class LocationUtil implements LocationListener 
{
private Context context;
private LocationManager locationManager;
Location ToPassLocation = null;
// chetan changes
private String provider;

// changes

public LocationUtil(Context context) 
{
    this.context = context;
    Log.d("Location", "Object created");

    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,0, this);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,0, this);
}

public Location getLatLongLast() 
{
    // chetan changes
    if (ToPassLocation == null) 
    {
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);

        if (provider.isEmpty()) 
        {   
            Log.e("Location_Util", "OLD Provider:- NETWORK_Provider");
            provider = LocationManager.NETWORK_PROVIDER;
            onProviderEnabled(provider);
            Location location = locationManager.getLastKnownLocation(provider);
            onProviderEnabled(provider);
            return location;
        }
        else if (provider.isEmpty()) 
        {
            Log.e("Location_Util", "OLD Provider:- GPS_Provider");
            provider = LocationManager.GPS_PROVIDER;
            onProviderEnabled(provider);
            Location location = locationManager.getLastKnownLocation(provider);
            onProviderEnabled(provider);
            return location;
        }
        else 
        {
            Log.e("Location_Util", "OLD Provider:- PASSIVE_Provider");
            provider = LocationManager.PASSIVE_PROVIDER;
            onProviderEnabled(provider);
            Location location = locationManager.getLastKnownLocation(provider);
            onProviderEnabled(provider);
            return location;
        }
    } 
    else 
    {
        Log.e("Location_Util", "NEW Provider:- Will get while calling get provider");
        return ToPassLocation;
    }
} 

  //    public Location getLatLongLastNew()
 // { 
//      return ToPassLocation;
//  } 
//  

@Override
public void onLocationChanged(Location location) 
{
    ToPassLocation = location;
    System.err.println("Location New:-"+ ToPassLocation);
    System.err.println("Latitude__:-"+location.getLatitude()+"-:");
    System.err.println("Longitude_:-"+location.getLongitude()+"-:");
    Log.e("Location_Util",  "Provider__:-"+location.getProvider());
    location.getLatitude();
    location.getLongitude();
}

@Override
public void onProviderDisabled(String provider) 
{
    // TODO Auto-generated method stub
}

@Override
public void onProviderEnabled(String provider) 
{}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) 
{
    // TODO Auto-generated method stub
}

  public void stopUsingGPS(){
        if(locationManager != null){
            locationManager.removeUpdates(this);
        }       
    }
}

关于Android gps以编程方式打开和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28425802/

相关文章:

javascript - 使用插件访问从 phonegap Cordova 中的外部 URL 加载 Webste

android - 从 NFC 应用程序到 PN532 读卡器的数据传输

android - 在android中输入数据的自定义布局

java - 将 GPS 坐标循环写入 SQL 服务器

java - 从 nutiteq SDK 找不到 MBTilesRasterDataSource?

android - 没有 neon 支持的 Android 上 ffmpeg 解码的性能

android - ListView的getView()方法是什么时候调用的?

iphone - 仅从 GPS 获取 iPhone 上的位置 - 而不是 wifi 网络

Android 可选 GPS 权限

android - GPS Android 中的 LocationManager requestLocationUpdates()