小弟下了个GPS小程序,是吴亚峰老师的,只想测试一下是否能在真机上工作,模拟器工作正常,到了真机上就不正常了,代码如下:
package wyf.wpf; //声明包语句import android.app.Activity; //引入相关类
import android.content.Context; //引入相关类
import android.location.Criteria; //引入相关类
import android.location.Location; //引入相关类
import android.location.LocationListener; //引入相关类
import android.location.LocationManager; //引入相关类
import android.os.Bundle; //引入相关类
import android.widget.EditText; //引入相关类 public class Sample_15_1 extends Activity {
LocationManager lm; // 声明LocationManager对象的引用
EditText et; // 声明EditText对象的引用
LocationListener ll = new LocationListener() {
@Override
public void onLocationChanged(Location location) {// 重写onLocationChanged方法
updateView(location);
} @Override
public void onProviderDisabled(String provider) { // 重写onProviderDisabled方法
updateView(null);
} @Override
public void onProviderEnabled(String provider) { // 重写onProviderEnabled方法
Location l = lm.getLastKnownLocation(provider); // 获取位置信息
updateView(l); // 更新EditText控件的内容
} @Override
public void onStatusChanged(String provider, int status, Bundle extras) { // 重写onStatusChanged方法
}
}; @Override
public void onCreate(Bundle savedInstanceState) { // 重写onCreate方法
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 设置当前屏幕
et = (EditText) findViewById(R.id.et); // 获得EditText对象
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 创建LocationManager对象
String bestProvider = lm.getBestProvider(getCriteria(), true); // 设置查询条件
Location l = lm.getLastKnownLocation(bestProvider); // 获取位置信息
updateView(l); // 更新EditText控件的内容
lm.requestLocationUpdates(bestProvider, 5000, 8, ll); // 添加LocationListener监听器
} // 方法:返回查询条件
public Criteria getCriteria() {
Criteria c = new Criteria();
c.setAccuracy(Criteria.ACCURACY_COARSE); // 设置查询精度
c.setSpeedRequired(false); // 设置是否要求速度
c.setCostAllowed(false); // 设置是否允许产生费用
c.setBearingRequired(false); // 设置是否需要得到方向
c.setAltitudeRequired(false); // 设置是否需要得到海拔高度
c.setPowerRequirement(Criteria.POWER_LOW); // 设置允许的电池消耗级别
return c; // 返回查询条件
} // 方法:更新EditText中显示的内容
public void updateView(Location newLocation) {
if (newLocation != null) { // 判断是否为空
et.setText("您现在的位置是\n纬度:");
et.append(String.valueOf(newLocation.getLatitude())); // 获得纬度
et.append("\n经度:");
et.append(String.valueOf(newLocation.getLongitude())); // 获得精度
} else { // 如果传入的Location对象为空则清空EditText
et.getEditableText().clear(); // 清空EditText对象
}
}
}
AndroidManifest.xml 文件如下:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="wyf.wpf"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Sample_15_1"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>    </application>
    <uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest> 真机是Android2.2 这个小程序我也是用2.2重新编译的,导入为apk文件时自己创建了keystore,在手机上没什么反应,但是我用*555666#确实能够得到GPS位置信息,所以手机硬件和地方都是没问题的,求教.,.....

解决方案 »

  1.   

    你拿着手机不要在屋里测试,需要到室外测试。因为GPS信号不是特别强,容易被高楼大厦给挡住。
      

  2.   

    就是在屋外啊,大哥,我用其他方式能够正常得到GPS位置信息.....继续求救
      

  3.   

    1、移动距离超过8米了吗?
    2、bestProvider具体会是哪个?GPS还是GPRS,建议可以写死了GPS或GPRS
    3、我测试过onLocationChanged这个方法,发现这个方法被调用的情况很奇特,时间到了,距离也够了,它就是不会被调用,要过很长一段时间,所以建议自己写个Timer每隔一段时间用getLastKnowLocation()那个方法获取一下比较好我就是这么做的
      

  4.   

    是这样的,我们公司的一个样机,GPS正常,但是这个demo就是不工作,我在同事的手机进行了测试,一切正常,可以正常工作.....无语中..