<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" />
public class MainActivity extends ActionBarActivity implements View.OnClickListener { private TextView helloWorld; private Button update; private LocationListener locationListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); initLocationListener(); } private void requestLocationUpdate() { LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); List<String> allProviders = locationManager.getAllProviders(); for (String provider : allProviders) { helloWorld.append(provider + "\n"); } String bestProvider = locationManager.getBestProvider(createGPSCriteria(), true); helloWorld.append("Best: " + bestProvider + "\n"); locationManager.requestSingleUpdate(bestProvider, locationListener, null); } private void initLocationListener() { locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { Calendar calendar = Calendar.getInstance(); int day = calendar.get(Calendar.DATE); int month = calendar.get(Calendar.MONTH) + 1; SunAsyncTask sunAsyncTask = new SunAsyncTask(location.getLatitude(), location.getLongitude(), day, month); try { HttpResponse response = sunAsyncTask.execute().get(); String stringEntity = EntityUtils.toString(response.getEntity()); SunXmlParser sunXmlParser = new SunXmlParser(stringEntity); helloWorld.append("Sunset: " + sunXmlParser.parse(SunXmlParser.SUNSET) + "\n"); helloWorld.append("Sunrise: " + sunXmlParser.parse(SunXmlParser.SUNRISE) + "\n"); } catch (Exception e) { e.printStackTrace(); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }; } private void initUI() { helloWorld = (TextView) findViewById(R.id.hello_world); update = (Button) findViewById(R.id.update); update.setOnClickListener(this); } private Criteria createGPSCriteria() { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setCostAllowed(false); return criteria; } @Override public void onClick(View clickedView) { int id = clickedView.getId(); if (id == R.id.update) { requestLocationUpdate(); } } }
public class SunAsyncTask extends AsyncTask<Void, Void, HttpResponse> { private double latitude; private double longitude; private int day; private int month; public SunAsyncTask(double latitude, double longitude, int day, int month) { this.latitude = latitude; this.longitude = longitude; this.day = day; this.month = month; } private String createUrl() { // http://www.earthtools.org/sun/<latitude>/<longitude>/<day>/<month>/<timezone>/<dst> StringBuilder stringBuilder = new StringBuilder("http://www.earthtools.org/sun/"); stringBuilder.append(String.valueOf(latitude)).append("/"); stringBuilder.append(String.valueOf(longitude)).append("/"); stringBuilder.append(String.valueOf(day)).append("/"); stringBuilder.append(String.valueOf(month)).append("/"); stringBuilder.append("99").append("/"); stringBuilder.append("0"); Log.d("URL", stringBuilder.toString()); return stringBuilder.toString(); } @Override protected HttpResponse doInBackground(Void... params) { HttpResponse response = null; HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(createUrl()); try { response = client.execute(get); } catch (IOException e) { e.printStackTrace(); } return response; } }
public class SunXmlParser { private String xmlString; private XmlPullParser parser; public static final String SUNRISE = "sunrise"; public static final String SUNSET = "sunset"; public SunXmlParser(String xmlString) throws XmlPullParserException { this.xmlString = xmlString; parser = Xml.newPullParser(); parser.setInput(new StringReader(xmlString)); } public void setXmlString(String xmlString) throws XmlPullParserException { this.xmlString = xmlString; } public String parse(String tag) throws XmlPullParserException, IOException { parser.setInput(new StringReader(xmlString)); int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if(eventType == XmlPullParser.START_TAG && parser.getName().equalsIgnoreCase(tag)) { parser.next(); return parser.getText(); } eventType = parser.next(); } return "Not found"; } }
Source: https://habr.com/ru/post/248539/
All Articles