我正在尝试获取Gps纬度和经度,但我有一个查询,每当我尝试获取Lat&很长没有SIM卡,它没有提供任何信息,只要我插入我的SIM卡,它提供了所需的所有信息。
LocationManager mlocManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0, 0, mlocListener);
你可以看到我使用的是GPS_PROVIDER,它并没有给我Lat&没有网络运营商的帮助,任何人都可以打电话给我吗?
另一件事是如何从应用程序启动和停止GPS意味着我想在特定时间后启动gps,而不是一旦我得到beslocation,我可以关闭它。
答案 0 :(得分:7)
您无需访问任何网络即可在Android上获取GPS位置。但是互联网连接将位置修复从大约5分钟加速到5秒(大约)!这种改进是由Assisted-GPS (A-GPS)带来的,而不是独立的GPS。
GPS手机(包括Android设备)检查网络连接是否可用。如果是这样,他们从A-GPS服务器下载辅助数据并使用它来计算GPS芯片组的定位。如果没有,GPS芯片组必须从GPS卫星下载数据,这需要很长时间(速率为每秒50 位!)。 如果不久前计算出GPS位置,也可以加快该过程。
首先:
然后启动您的应用并等待,可以在第一次修复可用之前几分钟。
至于从你的应用程序启动GPS,似乎可能(见How can I enable or disable the GPS programmatically on Android?),但我不知道如何!至少您可以下载Tasker并对其进行编程以启动/停止GPS。
答案 1 :(得分:0)
我认为您遇到的一个问题可能是Android中没有任何“地图”。这些地图是在手机需要时随时从谷歌的服务器加载的。例如,当您只需要一个社区地图时,为什么要加载整个国家/地区的地图?这就是它背后的理论。它会抓住您的位置,将其发送到Google的服务器,然后它会为您提供它认为您需要的地图。当然,如果您将所有地图(我听到可能,但我不完全确定)下载到您的设备上,那么可能情况并非如此......
编辑: Google确实不允许下载他们的地图。 (感谢Austyn提供的信息)。
答案 2 :(得分: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网络,您仍然可以使用不同的方式获取您的位置。我希望这能回答你的问题。
答案 3 :(得分:0)
这是我使用按钮的主要活动,我在其上设置了一个onClickListner来将我的GPS从OFF状态切换到ON,并且不需要任何许可来执行此操作。
经过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);
}
}