Android GPS代码无错误但不显示位置

Android GPS代码无错误但不显示位置,android,Android,对,它将在模拟器上运行,但不会显示位置。gps也在该设置中打开。我从一个教程中得到了代码,它在很多ppl中都很有效,但是no1遇到了我的问题。如果有人能告诉我原因,我将不胜感激。哦,我在安卓2.2上运行 这是我的代码: package gps.attempt; import android.app.Activity; import android.content.Intent; import android.location.Location; import android.location.

对,它将在模拟器上运行,但不会显示位置。gps也在该设置中打开。我从一个教程中得到了代码,它在很多ppl中都很有效,但是no1遇到了我的问题。如果有人能告诉我原因,我将不胜感激。哦,我在安卓2.2上运行

这是我的代码:

package gps.attempt;

import android.app.Activity;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class GpsAttemptActivity extends Activity implements LocationListener {

/* this class implements LocationListener, which listens for both
 * changes in the location of the device and changes in the status
 * of the GPS system.
 * */

static final String tag = "Main"; // for Log

TextView txtInfo;
LocationManager lm;
StringBuilder sb;
int noOfFixes = 0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    /* get TextView to display the GPS data */
    txtInfo = new TextView(this);

    /* the location manager is the most vital part it allows access
     * to location and GPS status services */
    lm = (LocationManager) getSystemService(LOCATION_SERVICE);
}

@Override
protected void onResume() {
    /*
     * onResume is is always called after onStart, even if the app hasn't been
     * paused
     *
     * add location listener and request updates every 1000ms or 10m
     */
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10f, this);
    super.onResume();
}

@Override
protected void onPause() {
    /* GPS, as it turns out, consumes battery like crazy */
    lm.removeUpdates(this);
    super.onResume();
}

@Override
public void onLocationChanged(Location location) {
    Log.v(tag, "Location Changed");

    sb = new StringBuilder(512);

    noOfFixes++;

    /* display some of the data in the TextView */

    sb.append("No. of Fixes: ");
    sb.append(noOfFixes);
    sb.append('\n');
    sb.append('\n');

    sb.append("Londitude: ");
    sb.append(location.getLongitude());
    sb.append('\n');

    sb.append("Latitude: ");
    sb.append(location.getLatitude());
    sb.append('\n');

    sb.append("Altitiude: ");
    sb.append(location.getAltitude());
    sb.append('\n');

    sb.append("Accuracy: ");
    sb.append(location.getAccuracy());
    sb.append('\n');

    sb.append("Timestamp: ");
    sb.append(location.getTime());
    sb.append('\n');

    txtInfo.setText(sb.toString());
}

@Override
public void onProviderDisabled(String provider) {
    /* this is called if/when the GPS is disabled in settings */
    Log.v(tag, "Disabled");

    /* bring up the GPS settings */
    Intent intent = new Intent(
            android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    startActivity(intent);
}

@Override
public void onProviderEnabled(String provider) {
    Log.v(tag, "Enabled");
    Toast.makeText(this, "GPS Enabled", Toast.LENGTH_SHORT).show();

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    /* This is called when the GPS status alters */
    switch (status) {
    case LocationProvider.OUT_OF_SERVICE:
        Log.v(tag, "Status Changed: Out of Service");
        Toast.makeText(this, "Status Changed: Out of Service",
                Toast.LENGTH_SHORT).show();
        break;
    case LocationProvider.TEMPORARILY_UNAVAILABLE:
        Log.v(tag, "Status Changed: Temporarily Unavailable");
        Toast.makeText(this, "Status Changed: Temporarily Unavailable",
                Toast.LENGTH_SHORT).show();
        break;
    case LocationProvider.AVAILABLE:
        Log.v(tag, "Status Changed: Available");
        Toast.makeText(this, "Status Changed: Available",
                Toast.LENGTH_SHORT).show();
        break;
    }
}

@Override
protected void onStop() {
    /* may as well just finish since saving the state is not important for this toy app */
    finish();
    super.onStop();
}
}

这是我的舱单:

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="gps.attempt"
 android:versionCode="1"
 android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".GpsAttemptActivity"
        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-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" />


要在模拟器中使用GPS,您需要使用
geo-fix
命令手动传递位置

这本指南和这本书应该能帮助你让它工作。

你的问题是(至少)你的文本视图不可见。您应该在
res/layout/main.xml
中添加文本视图,并使用该视图显示文本。例如:

/* get TextView to display the GPS data from Layout*/
txtInfo = (TextView) findViewById(R.id.textView1);
xml中的TextView如下所示

<TextView android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Java编译器将自动使用StringBuilder,但您的代码看起来更干净。请参阅例如

如何将GPS位置传递给模拟器?Ru在google avd模拟器中运行?是否要在清单中添加任何use库!?您是否向模拟器发送了GPS数据?否则它将不会向侦听器发送任何事件。这与缺少修复无关,但不应在onPause()中调用super.onResume()@用户1234167查看zapi的答案。我想这会解决你的问题?如果你不把它添加到布局中,它就不可见了,非常感谢它终于起作用了!现在有没有一种简单的方法将其改为反向地理编码?我看了一些教程,但还是有点困惑,我想你可以用
location.getLongitude()
location.getLatitude()
来输入。我想您还需要Internets权限,或者从DDMS透视图的“Emulator Control”窗格中传递它
String text = "No. of Fixes: " + 
    noOfFixes +
    '\n' +
    // and so on
    '\n';
txtInfo.setText(text);