-1

我是 Android 新手,在使用基本 GPS 信息显示程序时遇到了困难。程序意外停止。如果您有任何建议或意见,我将不胜感激。

我正在使用 Android 开发工具在 Eclipse 中为 Android 2.3.3 编写代码。

下面给出了我所看到的相关代码部分,但为了您的方便,该项目在此处存档:

http://www.filedropper.com/showdownload.php/2013-06-05t1434gps1

代码部分如下:

主.java:

package com.example.gps_1;

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 Main 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);

        /* Have TextView display the GPS data.
         * */
        txtInfo = (TextView) findViewById(R.id.textInfo);

        /* The location manager is allows access to location and GPS status
         * services. 
         * */
        lm = (LocationManager) getSystemService(LOCATION_SERVICE);
    }

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

    @Override
    protected void onPause() {
        /* GPS has non-negligible battery consumption.*/
        lm.removeUpdates(this);
        super.onPause();
    }

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

        sb = new StringBuilder(512);

        noOfFixes++;

        /* Display some of the information in the TextView. */

        sb.append("number of fixes: ");
        sb.append(noOfFixes);
        sb.append('\n');
        sb.append('\n');

        sb.append("longitude: ");
        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() {
        /* upgrade: save the state */
        finish();
        super.onStop();
    }
}

主.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Main" >

    <TextView
        android:id="@+id/textInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>
4

2 回答 2

1

您是否为清单文件添加了权限

于 2013-06-05T13:48:15.407 回答
0

还添加粗略位置权限.. 因为精细位置权限仅在您的程序获取 gps 位置时,如果它从网络中获取位置,您还必须添加粗略位置权限

于 2013-06-05T17:03:33.797 回答