Convert Kotlin to Java Code: Detecting Day and Night with Location
package com.android.dayandnightdetector;
import android.Manifest;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Build;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import com.google.android.gms.location.*;
import com.lb.twilight_calculator.TwilightCalculator;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
private LocationCallback locationCallback;
private boolean requestingLocationUpdates = false;
private FusedLocationProviderClient fusedLocationClient;
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult == null) {
textView.setText("failed to get location for some reason");
} else {
showDayNightInfo(locationResult.getLastLocation());
stopLocationUpdates();
}
}
};
}
public void showDayNightInfo(Location location) {
android.text.format.DateFormat timeFormat = android.text.format.DateFormat.getTimeFormat(this);
TwilightCalculator twilightCalculator = TwilightCalculator.getInstance();
Date date = new Date();
TwilightCalculator.TwilightResult twilightResult = twilightCalculator.calculateTwilight(date.getTime(), location.getLatitude(), location.getLongitude());
boolean isDay = twilightResult.isDay();
String sunRiseText;
if (twilightResult.getSunrise() != -1L) {
Calendar sunRiseCal = Calendar.getInstance();
sunRiseCal.setTimeInMillis(twilightResult.getSunrise());
sunRiseText = "day starts at " + timeFormat.format(sunRiseCal.getTime());
} else {
sunRiseText = "day/night never ends";
}
String sunSetText;
if (twilightResult.getSunset() != -1L) {
Calendar sunSetCal = Calendar.getInstance();
sunSetCal.setTimeInMillis(twilightResult.getSunset());
sunSetText = "night starts at " + timeFormat.format(sunSetCal.getTime());
} else {
sunSetText = "day/night never ends";
}
String textOfNow = "current time to check:" + formatDateUsingDeviceSettings(this, date) + " " + formatTimeUsingDeviceSettings(this, date);
textView.setText("got location:" + location + "\n" + sunRiseText + "\n" + sunSetText + "\n" + textOfNow + "\nis it day now? " + isDay);
}
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onResume() {
super.onResume();
switch (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
case PackageManager.PERMISSION_DENIED:
textView.setText("need location permission to calculate when is day/night in your area");
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
break;
case PackageManager.PERMISSION_GRANTED:
textView.setText("getting location and then deciding if it is day or night...");
if (!requestingLocationUpdates)
startLocationUpdates();
break;
}
}
private void startLocationUpdates() {
if (requestingLocationUpdates || ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
return;
requestingLocationUpdates = true;
fusedLocationClient.requestLocationUpdates(
new LocationRequest().setPriority(LocationRequest.PRIORITY_LOW_POWER),
locationCallback,
null
);
}
@Override
protected void onPause() {
super.onPause();
stopLocationUpdates();
}
private void stopLocationUpdates() {
requestingLocationUpdates = false;
fusedLocationClient.removeLocationUpdates(locationCallback);
}
public static String formatDateUsingDeviceSettings(Context context, Date date) {
if (date == null)
return "";
android.text.format.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(context);
return dateFormat.format(date);
}
public static String formatTimeUsingDeviceSettings(Context context, Date date) {
if (date == null)
return "";
android.text.format.DateFormat timeFormat = android.text.format.DateFormat.getTimeFormat(context);
return timeFormat.format(date);
}
}
原文地址: https://www.cveoy.top/t/topic/fADN 著作权归作者所有。请勿转载和采集!