首页 > 解决方案 > 在 AppWidgetProvider 中获取 GPS 经纬度

问题描述

我的问题:

  1. 如何在 AppWidgetProvider 中获取 GPS 纬度和经度。
  2. 做起来有多烦?
  3. 它有多不受欢迎?

我已经看到了活动的示例,但没有看到 AppWidgetProvider 的示例。我知道那里必须有获取 GPS 信息的小部件。

这是我目前不起作用的尝试。我无论如何都不会接受这个解决方案。如果有人有工作示例,将不胜感激。

ClockWidget.java

public class ClockWidget extends AppWidgetProvider {
...
private void getLastLocation(Context context) {
        if (mFusedLocationClient == null)
            mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);

            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                mFusedLocationClient.getLastLocation().addOnCompleteListener(new OnCompleteListener<android.location.Location>() {
                    @Override
                    public void onComplete(@NonNull Task<android.location.Location> task) {
                        android.location.Location location = task.getResult();
                        Location loc = new Location("0", "0");
                        if (location == null) {
                        } else {
                            loc = new Location(location.getLatitude(), location.getLongitude());
                        }
                        SunriseSunsetCalculator calculator = new SunriseSunsetCalculator(loc, "America/New_York");
                        Calendar sunriseCalendar = calculator.getOfficialSunriseCalendarForDate(Calendar.getInstance());
                        LocalDateTime sunriseTime = LocalDateTime.ofInstant(sunriseCalendar.toInstant(), sunriseCalendar.getTimeZone().toZoneId());
                        Calendar sunsetCalendar = calculator.getOfficialSunsetCalendarForDate(Calendar.getInstance());
                        LocalDateTime sunsetTime = LocalDateTime.ofInstant(sunsetCalendar.toInstant(), sunsetCalendar.getTimeZone().toZoneId());
                        dayEvents.put("Sunrise", new DayEvent("Sunrise", sunriseTime));
                        dayEvents.put("Sunset", new DayEvent("Sunset", sunsetTime));
                    }
                });
        }
    }
...

AndroidManifest.xml

...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
...

==================================================== ===============

背景:我正在尝试编写一个时钟 AppWidgetProvider。时钟是我希望人们想要创建的第一个小部件之一,但我每时每刻都在与谷歌作斗争。我不应该对所有事情都需要解决方法......

5 小时以上的路障:

  1. 在小部件上绘制自定义图形显然是一个很大的禁忌。在 5 个不起作用的解决方案之后,此处描述了解决方法: 在小部件 android 上绘制画布

  2. 比每 30 分钟更频繁地更新小部件显然是一个很大的禁忌。最直观的解决方案 android:updatePeriodMillis 最少有 30 分钟。在 5 个无效的解决方案之后,解决方法很麻烦,并在此处描述: https ://www.appsrox.com/android/tutorials/dailyvocab/2/

  3. 将 API 版本从 21 更改为 26 会导致 android studio 中的模拟器完全停止工作。在 5 个无效的解决方案之后,HAXM 问题下描述了解决方法: https ://docs.microsoft.com/en-us/xamarin/android/get-started/installation/android-emulator/troubleshooting?pivots=windows

  4. 在画布上绘制表情符号显然是一个很大的禁忌。在 5 个解决方案无效后,此处描述了解决方法: 使用 unicode 值在 Android 画布上绘制表情符号

  5. 在 AppWidgetProvider 中获取 GPS 纬度经度显然是一个很大的禁忌。期待人们可能有的想法!

标签: javaandroidgpsappwidgetprovider

解决方案


推荐阅读