代码之家  ›  专栏  ›  技术社区  ›  HelloWorld1

在恢复阶段每次显示GPS坐标

  •  0
  • HelloWorld1  · 技术社区  · 9 年前

    目标:
    每次运行resume时,我都希望使用GPS坐标看到新位置

    问题:
    我错过了什么?

    信息:

    enter image description here


    android清单。xml

    <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name">
        <activity android:name=".SimpleGPSTestActivity"
            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.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    


    SimpleGPSTestActivity。反恐精英

    package com.jfdimarzio.test3;
    
    import android.Manifest;
    import android.app.Activity;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.location.LocationProvider;
    import android.os.Bundle;
    import android.support.v4.app.ActivityCompat;
    import android.text.format.Time;
    import android.widget.TextView;
    
    import java.text.DecimalFormat;
    
    
    
    public class SimpleGPSTestActivity extends Activity {
        private TextView texten = null;
        private LocationManager location_manager;
        private LocationListener location_listener;
    
        private void print(String text) {
            Time now = new Time();
            now.setToNow();
            String timeString = now.format("%H:%M:%S");
            String line = timeString + ": " + text + "\n";
            texten.setText(texten.getText() + line);
            texten.invalidate();
            texten.postInvalidate();
        }
    
        DecimalFormat dec = new DecimalFormat("0.0000");
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            texten = new TextView(this);
            texten.setText("");
            setContentView(texten);
    
            print("onCreate");
    
    
            /*
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    
    
            // Register the listener with the Location Manager to receive
            // location updates
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
    */
    
            location_manager =
                    (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    
            location_listener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    double longitude = location.getLongitude();
                    double latitude = location.getLatitude();
                    double accuracy = location.getAccuracy();
                    double altitude = location.getAltitude();
                    print("New location: Long " + dec.format(longitude) +
                            ", lat " + dec.format(latitude) +
                            ", accuracy " + dec.format(accuracy) +
                            ", alt " + dec.format(altitude));
                }
    
                @Override
                public void onProviderDisabled(String provider) {
                    print("Location provider has been disabled.");
                }
    
                @Override
                public void onProviderEnabled(String provider) {
                    print("Good news! Location provider has been enabled.");
                }
    
                @Override
                public void onStatusChanged(String provider, int status,
                                            Bundle extras) {
                    if (status == LocationProvider.OUT_OF_SERVICE)
                        print("GPS status changed to OUT_OF_SERVICE.");
                    else if (status == LocationProvider.TEMPORARILY_UNAVAILABLE)
                        print("GPS status changed to TEMPORARILY_UNAVAILABLE.");
                    else if (status == LocationProvider.AVAILABLE)
                        print("Good news! GPS status changed to AVAILABLE.");
                }
            };
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            print("onPause");
            location_manager.removeUpdates(location_listener);
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            print("onResume");
            try {
    
    
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    
    
                if (ActivityCompat.checkSelfPermission(
                        this,
                        Manifest.permission.ACCESS_FINE_LOCATION) !=
                        PackageManager.PERMISSION_GRANTED &&
                        ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
                {
                    // TODO: Consider calling
                    //    ActivityCompat#requestPermissions
                    // here to request the missing permissions, and then overriding
                    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                    //                                          int[] grantResults)
                    // to handle the case where the user grants the permission. See the documentation
                    // for ActivityCompat#requestPermissions for more details.
    
    
                    return;
                }
    
                location_manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, location_listener);
            }
            catch (Exception e)
            {
                print("Couldn't use the GPS: " + e + ", " + e.getMessage());
            }
        }
    
    
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
        {
            switch (requestCode) {
                case 1: {
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
                    } else {
                        // permission denied, boo! Disable the
                        // functionality that depends on this permission.
                    }
                    return;
                }
                // other 'case' lines to check for other
                // permissions this app might request
            }
        }
    
    
    
    
    
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Pablo Baxter    9 年前

    您没有给LocationManager足够的时间来获取返回给您的位置。在清晰的天空中,使用GPS warmed up (几乎总是这样),获得位置更新大约需要5-10秒。在其他情况下,如果你在地下或没有GPS的地方,可能需要更长的时间或可能永远不会。从外观上看,您似乎立即打开然后关闭活动,活动启动后停止更新。