目标:
每次我运行简历时,我都希望使用GPS的坐标
问题:
根据图片,它不起作用,我也检索" GPS状态更改为Temporarily_unavailable"。
我错过了哪一部分?
谢谢!
的信息:
*我是android的新手
*我使用的是API 23
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
}
}
}
答案 0 :(得分:0)
您没有给LocationManager足够的时间来获取返回给您的位置。在天空的清晰视野中,使用GPS warmed up(它几乎总是如此),需要大约5-10秒才能获得位置更新。在其他情况下,如果您在地下或没有GPS的地方,可能需要更长时间或可能永远不会。从所有这些看起来,你似乎打开然后立即关闭活动,然后开始然后停止更新。