Я пытаюсь настроить действие, которое при доступе скажет пользователю, сколько спутников GPS доступно и насколько сильный сигнал, но так как я не могу даже получить номер спутника, я вроде застрял.
И теперь, когда я пытался заставить его работать более месяца, создав код для выполнения этого в самом задании или до нескольких классов, которые расширяют или реализуют GpsStatus, GpsStatus.Listener или LocationManager, я Я в недоумении кто-нибудь есть идеи?
Весь этот код находится в самой деятельности.
Я отключил все виды использования классов и кода, которые я пробовал, но не смог приступить к работе, это самое близкое, что я получил, и ни одна из подсчитывающих переменных не возвращает ничего, кроме нуля.
@TargetApi(Build.VERSION_CODES.N)
public void countSatellites(){
int satellites = 0;
int satellitesInFix = 0;
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
GpsStatus status = locationManager.getGpsStatus(null);
Iterable sats = status.getSatellites();
Iterator satI = sats.iterator();
int count = 0;
while(satI.hasNext()){
GpsSatellite gpssatellite = (GpsSatellite) satI.next();
if (gpssatellite.usedInFix()){
count++;
}
}
int timetofix = locationManager.getGpsStatus(null).getTimeToFirstFix();
for (GpsSatellite sat : locationManager.getGpsStatus(null).getSatellites()) {
if (sat.usedInFix()) {
satellitesInFix++;
}
satellites++;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case 1: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (checkLocationPermission()) {
countSatellites();
}
} else {
}
return;
}
}
}
public boolean checkLocationPermission() {
String permission = "android.permission.ACCESS_FINE_LOCATION";
int res = this.checkCallingOrSelfPermission(permission);
return (res == PackageManager.PERMISSION_GRANTED);
}
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_connections);
LocationUpdateService locationService = new LocationUpdateService();
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
В другом файле
public class LocationUpdateService extends Service implements GpsStatus.Listener{
public void onCreate(){
Log.i("on create", "success");
super.onCreate();
registerGpsStatusListener();
}
private void registerGpsStatusListener() {
Log.i("gps listener", "success");
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.addGpsStatusListener(this);
}
@Override
public void onGpsStatusChanged(int event) {
Log.i("gps change", "success");
switch (event) {
case GpsStatus.GPS_EVENT_STARTED:
Log.e("gps started", "onGpsStatusChanged started");
break;
case GpsStatus.GPS_EVENT_STOPPED:
Log.e("gps stopped", "onGpsStatusChanged stopped");
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
Log.e("gps first", "onGpsStatusChanged first fix");
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Log.e("gps status", "onGpsStatusChanged status");
break;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.i("on bind", "success");
return null;
}
public void onLocationChanged(Location location) {
Log.i("location change", "success");
}
}