5

我正在尝试获取 Gps 纬度和经度,但我有一个查询,每当我尝试在没有 sim 卡的情况下获取纬度和经度时,它没有提供任何信息,只要我插入我的 sim 卡,它就会为我提供所有信息所需的方式。

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

LocationListener mlocListener = new MyLocationListener();

mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                                   0, 0, mlocListener);

你可以看到我在使用 GPS_PROVIDER,如果没有网络运营商的帮助,它不会给我纬度和经度,有人可以给我打电话吗?


另一件事是如何从应用程序启动和停止 GPS 意味着我想在特定时间后启动 gps,而不是一旦我得到定位,我可以将其关闭。

4

4 回答 4

9

您无需访问任何网络即可在 Android 上获取 GPS 位置。但是互联网连接可以将定位时间从大约 5 分钟缩短到 5 秒(大约)!这种改进是由辅助 GPS (A-GPS)带来的,而不是独立 GPS。

GPS 手机(包括 Android 设备)检查网络连接是否可用。如果是这样,他们从 A-GPS 服务器下载辅助数据,并使用它来计算 GPS 芯片组的定位。如果没有,GPS 芯片组必须从 GPS 卫星下载数据,这需要很长时间(速率为每秒50位!)。如果不久前已经计算了 GPS 位置,则该过程也可以加快。

所以首先:

  • 检查您是否已将 ACCESS_FINE_LOCATION 添加到清单的权限
  • 检查手机设置中是否启用了 GPS 卫星
  • 检查您是否不在室内(来自 20,000 公里以上卫星的信号不喜欢屋顶和墙壁)

然后启动您的应用程序并等待,在第一个修复可用之前可能有几分钟。

至于从您的应用程序启动 GPS,这似乎是可能的(请参阅如何在 Android 上以编程方式启用或禁用 GPS?),但我不知道如何!至少您可以下载Tasker并对其进行编程以启动/停止 GPS。

于 2011-02-08T21:05:47.247 回答
0

我认为您遇到的一个问题可能是 Android 中没有内置任何“地图”。这些地图是在手机需要时从谷歌的服务器上即时加载的。例如,当您只需要一个社区地图时,为什么还要加载整个国家的地图?这就是它背后的理论。它获取您的位置,将其发送到 Google 的服务器,然后将您认为需要的地图返回给您。当然,如果您将所有地图(我听说是可能的,但我不完全确定)下载到您的设备上,那么情况可能不会如此......

编辑:谷歌不允许下载他们的地图。(感谢 Austyn 提供信息)。

于 2011-02-08T20:43:42.807 回答
0

这可能已经过时了,但是您知道错误是什么吗?

我收到错误消息,“获取单元位置信息时出错”。

我找到了导致此错误的源代码。

private void requestRefLocation(int flags)
{
    TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
    if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
    {
        GsmCellLocation gsm_cell = (GsmCellLocation) phone.getCellLocation();
        if ((gsm_cell != null)
                && (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
                && (phone.getNetworkOperator() != null)
                && (phone.getNetworkOperator().length() > 3))
        {
            int type;
            int mcc = Integer.parseInt(phone.getNetworkOperator().substring(0, 3));
            int mnc = Integer.parseInt(phone.getNetworkOperator().substring(3));
            int networkType = phone.getNetworkType();
            if (networkType == TelephonyManager.NETWORK_TYPE_UMTS
                    || networkType == TelephonyManager.NETWORK_TYPE_HSDPA
                    || networkType == TelephonyManager.NETWORK_TYPE_HSUPA
                    || networkType == TelephonyManager.NETWORK_TYPE_HSPA)
            {
                type = AGPS_REF_LOCATION_TYPE_UMTS_CELLID;
            }
            else
            {
                type = AGPS_REF_LOCATION_TYPE_GSM_CELLID;
            }
            native_agps_set_ref_location_cellid(type, mcc, mnc, gsm_cell.getLac(), gsm_cell.getCid());
        }
        else
        {
            Log.e(TAG, "Error getting cell location info.");
        }
    } else {
        Log.e(TAG, "CDMA not supported.");
    }
}

注意检查语句

if ((gsm_cell != null)
            && (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
            && (phone.getNetworkOperator() != null)
            && (phone.getNetworkOperator().length() > 3))
    {

它以某种方式导致您面临的问题。当然,通过连接到 WIFI 网络,您仍然可以获得您的位置,因为它使用不同的方式来获取它。我希望这能回答你的问题。

于 2011-11-22T09:54:17.960 回答
0

这是我的主要活动,带有一个按钮,我在它上面设置了一个 onClickListner 来将我的 GPS 从关闭状态切换到开启,并且不需要任何权限来执行此操作。
使用 Android 2.2 测试,对我来说工作正常。

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class GPSONOFFActivity extends Activity {
/** Called when the activity is first created. */
Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    b=(Button)findViewById(R.id.button1);

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            toggleGPS(true);                
        }
    });
}

private void toggleGPS(boolean enable) {
    String provider = Settings.Secure.getString(getContentResolver(), 
        Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(provider.contains("gps") == enable) {
        return; // the GPS is already in the requested state
    }

    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"));
    this.sendBroadcast(poke);
 }
}
于 2012-05-23T10:55:56.723 回答