Android:locationManager requestSingleUpdate在一台设备上工作但在另一台设备上没有

时间:2014-02-26 20:25:57

标签: android broadcastreceiver locationmanager updating

首先:这是我关于Stackoverflow的第一个问题所以请告诉我,如果我犯了任何错误:)

我希望我的Activity在每次启动时获取用户位置。 我不需要定期更新,因此我尝试使用requestSingleUpdate。 完成本教程后: http://androidexperinz.wordpress.com/2012/04/19/current-location-update/

第一天它完全适用于三星Galaxy S2和三星Galaxy Tab 3,但是当我今天尝试时,S2没有加载位置,接收器永远不会被解雇, 虽然我没有更改我的代码,但设置完全相同。 我还重新启动了手机并重新安装了应用程序。 仍然没有区别,但它仍然在平板电脑上工作。

我注意到在不同的论坛中报告了Location API存在许多问题,因此它可能是Google Location API中的一个类似于此的错误: https://code.google.com/p/android/issues/detail?id=57707

或者我的设置或代码(下方发布)有问题:

ProgressBar PBLoad;
@Override 
public void onStart()
{
    super.onStart();
    boolean isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean dataConnection= cm.getActiveNetworkInfo()!=null;
    int resultCode =GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
      if (!isGPSEnabled||!dataConnection||ConnectionResult.SUCCESS != resultCode) 
      {
          //Show Dialog and ask user to enable GPS or Internet
      }
      else
      {
        registerReceiver(singleUpdateReceiver,new IntentFilter(SINGLE_LOCATION_UPDATE_ACTION));
        Intent updateIntent = new Intent(SINGLE_LOCATION_UPDATE_ACTION);
        singleUpatePI = PendingIntent.getBroadcast(this, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, singleUpatePI);
        PBLoad.setVisibility(View.VISIBLE);
        }
}

这是接收者:

protected BroadcastReceiver singleUpdateReceiver = new BroadcastReceiver() 
{
    @Override
    public void onReceive(Context context, Intent intent) {
        context.unregisterReceiver(singleUpdateReceiver);
        String key = LocationManager.KEY_LOCATION_CHANGED;
        Location location = (Location)intent.getExtras().get(key);
        if (location != null) {
            onLocationReceived(location);
        }
        locationManager.removeUpdates(singleUpatePI);
    }
};

1 个答案:

答案 0 :(得分:-1)

是的,事实证明这是google api的问题。我等了几个小时才重新启动设备,然后就可以了。