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

时间:2017-09-14 16:26:54

标签: android gps

目标:
每次我运行简历时,我都希望使用GPS的坐标

来查看新位置

问题:
根据图片,它不起作用,我也检索" GPS状态更改为Temporarily_unavailable"。 我错过了哪一部分?

谢谢!

的信息:
*我是android的新手 *我使用的是API 23

enter image description here

android manifest.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.cs

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 个答案:

答案 0 :(得分:0)

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