GPS安卓程序意外停止

时间:2013-06-05 13:38:14

标签: android gps textview

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

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

我在下面给出了相关的代码部分,但为方便起见,项目存档于此处:

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

代码部分如下:

Main.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();
    }
}

main.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>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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