标签: android-gps

RoboScript 无法在 Firebase Testlab 中单击“启用位置确定”按钮

我正在尝试在 Firebase TestLab 上使用 RoboScript 测试基于 Google 地图的 Android 应用程序。默认情况下,TestLab 设备上禁用位置。要启用它们,我们需要模拟单击系统提示上的“确定”按钮。但这种点击永远不会发生。您可以看到下面的屏幕截图。“确定”按钮永远不会被按下,流程将在此停止。

截屏

我检查了 RoboScript json 文件。Android studio 从未记录过“确定”按钮的点击。我尝试创建另一个元素,如下所示。但无法确定系统对话框的resourceId 应该是什么。

    {
        "eventType": "VIEW_CLICKED",
        "timestamp": 1512127956674,
        "replacementText": "",
        "actionCode": -1,
        "delayTime": 0,
        "canScrollTo": false,
        "elementDescriptors": [
          {
            "className": "android.widget.LinearLayout",
            "recyclerViewChildPosition": -1,
            "adapterViewChildPosition": -1,
            "groupViewChildPosition": 0,
            "resourceId": "com.entransys.parkeze:id/confirm_linear",
            "contentDescription": "",
            "text": ""
          },
          {
            "className": "android.support.v7.widget.ContentFrameLayout",
            "recyclerViewChildPosition": -1,
            "adapterViewChildPosition": -1,
            "groupViewChildPosition": 1,
            "resourceId": "android:id/content",
            "contentDescription": "",
            "text": ""
          },
          {
            "className": "android.support.v7.widget.FitWindowsLinearLayout",
            "recyclerViewChildPosition": -1,
            "adapterViewChildPosition": -1,
            "groupViewChildPosition": 0,
            "resourceId": "com.entransys.parkeze:id/action_bar_root",
            "contentDescription": "",
            "text": "" …
Run Code Online (Sandbox Code Playgroud)

android firebase android-gps

6
推荐指数
1
解决办法
655
查看次数

Android,熄屏时获取位置

我使用带有 fused api 的已启动服务,并直接在其上实现位置侦听器。即使屏幕锁定,位置也会持续更新,但如果屏幕关闭,位置就会停止。

那么,有没有什么方法可以确保屏幕关闭时位置保持更新呢?

我读了很多其他问题,但我真的不知道我错过了什么。

public class CLocationService extends Service implements GoogleApiClient.ConnectionCallbacks, LocationListener,
    GoogleApiClient.OnConnectionFailedListener {

private GoogleApiClient mGoogleApiClient;
private PowerManager.WakeLock mWakeLock;
private LocationRequest mLocationRequest;
// Flag that indicates if a request is underway.
private boolean mInProgress;

private Boolean servicesAvailable = false;

private boolean isStarted;

public static final int LOCATION_SERVICE_NOTIFICATION_ID = 4567654;

private void showNotification() {

    Intent notificationIntent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    Notification notification = new Notification.Builder(this)
            .setContentTitle(getText(R.string.app_name))
            .setContentText("")
            .setSmallIcon(R.mipmap.ic_notification)
            .setContentIntent(pendingIntent)
            .setTicker("")
            .build(); …
Run Code Online (Sandbox Code Playgroud)

service android location android-gps

5
推荐指数
1
解决办法
4399
查看次数

在打ze模式下获取位置更新

我在打ze睡模式下尝试在我的android应用中获取位置更新,该更新以前可以在android 5.x上使用。随着android 6和doze的出现,无论我做什么,更新都会在某个时候停止。在阅读了有关该主题的几篇文章和stackoverflow答案之后,我进行了以下更改:

  • 使我的服务成为前台服务
  • 使服务持有部分唤醒锁
  • 我已为我的应用授予WAKE_LOCK权限
  • 使服务在单独的进程中运行(针对某些Android错误的解决方法)
  • 我已为我的应用禁用电池优化

但是,无论何时打do睡,我都没有得到位置更新。我已经验证了打do睡开始时(通过定期记录消息)我的服务线程保持运行,但是位置管理器以某种方式停止发送更新。在这方面,关于Manager睡和LocationManager的文档非常少,所以我想知道是否有人知道一种使位置管理器在do睡中存活的方法?LocationManager上是否有某种方法,如果定期调用该方法,可以使LocationManager保持活动状态?请注意,我只对GPS更新感兴趣,更新频率很高,每秒更新一次。

android locationmanager android-gps android-doze

5
推荐指数
1
解决办法
2914
查看次数

如何在没有 setMyLocationEnabled true 的情况下显示当前位置蓝点?

我正在使用谷歌地图 V2,我需要显示自定义图像按钮单击以获取带有蓝点的当前位置,并且没有显示到 setMyLocationEnabled 按钮。并且此方法已经错误,但显示当前位置但不显示蓝点。

在此处输入图片说明

  googleMap.setMyLocationEnabled(false);
Run Code Online (Sandbox Code Playgroud)

android google-maps-api-2 currentlocation android-gps

5
推荐指数
1
解决办法
4001
查看次数

2019 年 4 月 6 日之后从 Location.getTime 返回的日期错误(周数翻转)

我有一部已 root 的手机 Samsung N7100 (kitkat 4.4.2)。2019 年 4 月 6 日之后,我开始获取日期为 1999 年的地点。

有时,位置信息的日期为 2019 年,但此后设备将停止接收任何位置信息。

只有 adb 命令有帮助,但一段时间后设备将停止接收任何位置。

settings put secure location_providers_allowed -gps
settings put secure location_providers_allowed +gps
Run Code Online (Sandbox Code Playgroud)

我已经尝试将固件更新到 android 6 和 7。没有任何帮助。

mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, this);
....

public void onLocationChanged(Location location) {
  Log.d(TAG, (new Date(location.getTime())).toLocaleString());
}
Run Code Online (Sandbox Code Playgroud)

gps android android-gps

5
推荐指数
1
解决办法
1804
查看次数

如何检测用户是否在设置中关闭了位置信息?

我想检测用户是否在运行时关闭了该位置。我可以检查他是否打开了它,或者在应用程序启动之前用户是否关闭了位置,但我无法检查他是否在之后关闭了它。

代码示例: MapEntity扩展LocationListener

class MapViewer(a: MainActivity, parentView: ViewGroup) : MapEntity(a, parentView) {

    override fun onProviderEnabled(provider: String?) {
        activity.hideGpsSnackbar()
    }

    override fun onProviderDisabled(provider: String?) {
        activity.showGpsSnackbar()
    }

}
Run Code Online (Sandbox Code Playgroud)

对于实时 GPS 位置检查,我正在使用 GnssStatus.Callback()

更新:

我已经BroadcastReceiver根据下面的答案创建了。

abstract class GPSReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        try {
           val locationManager = context.getSystemService(LOCATION_SERVICE) as LocationManager

             if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                    onGpsChanged(true)
                } else {
                    onGpsChanged(false)
                }
            } catch (ex: Exception) {
                App.log("IsGPSEnabled: $ex")
            }

        }

        abstract fun onGpsChanged(isEnabled: Boolean)
    } …
Run Code Online (Sandbox Code Playgroud)

android android-location kotlin android-maps-v2 android-gps

5
推荐指数
1
解决办法
1882
查看次数

java.lang.IllegalStateException:键 f0 的片段不再存在:唯一 ID

我是 android 的初学者,我无法理解为什么我会出错。当我单击主页按钮(底部导航栏)时,我收到此错误。我正在使用共享首选项来保存我的值,但是当检索到该值时,就会出现错误。

我的活动代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getLastLocation();

    binding.bottmNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId()) {
                case R.id.home1: //when i m clicking here
                    setFragment(homeFragment);
                    SharedPreferences shprefs = getSharedPreferences(prefs, MODE_PRIVATE);
                    SharedPreferences mprefs = getSharedPreferences(myprefs, MODE_PRIVATE);
                    String savedvalue = shprefs.getString("savedvalue", null);
                    String savedcountry = mprefs.getString("savedcountry", null);
                    if ((savedvalue != null && savedvalue.equals("India")) || savedcountry.equals("India")) {
                        newsModels.clear();
                        binding.bottmNav.getMenu().findItem(R.id.location).setTitle("India");
                        binding.bottmNav.getMenu().findItem(R.id.home1).setChecked(true);
                        setindianewsdata();
                        setindiashopdata();
                        setFragment(homeFragment);
                    } else if (savedvalue.equals("Usa") || savedcountry.equals("Usa")) {
                        newsModels.clear();
                        setusanewsdata();
                        setusashopdata();
                        setFragment(homeFragment);
                        binding.bottmNav.getMenu().findItem(R.id.location).setTitle("USA"); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-gps

5
推荐指数
1
解决办法
2372
查看次数

android.location.PROVIDERS_CHANGED 在设备上手动切换 GPS/位置时多次触发

我已经浏览了一些处理这个问题的资源,但没有一个提供令人满意的解释或解决方案。我浏览过的一些内容是:

关闭 GPS 时广播接收器调用了 2 次?

打开/关闭 wifi 或 gps 时,我的 BroadcastReceiver 被调用两次?

android.location.PROVIDERS_CHANGED BroadcastReceiver 多次触发

如何捕捉一次GPS关闭广播?

因此,我重新发布这个问题。

问题陈述很简单,我有一个广播接收器,每当设备的 GPS/位置状态发生变化时就会触发该接收器。问题在于 onReceive() 方法被多次调用(准确地说是 4 次)。

我已在清单文件中注册了我的接收器(而不是其他地方):

        <receiver android:name=".broadcasts.DeviceGpsStatusReceiver">
            <intent-filter>
                <action android:name="android.location.PROVIDERS_CHANGED" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
Run Code Online (Sandbox Code Playgroud)

我还确保该接收器未在我的应用程序中的其他任何地方注册。

广播接收器的设计如下:

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) {
            // my content
        }
    }
Run Code Online (Sandbox Code Playgroud)

即使进行了此更改,我仍然看到 onReceive() 重写方法被多次触发。为什么会这样呢?有办法解决这个问题吗?

android broadcastreceiver android-gps

5
推荐指数
0
解决办法
636
查看次数

GPS 跟踪的前台服务在一段时间后停止工作

背景: 我们有一个应用程序可以为一群人进行时间登记。在此示例中,我们使用 Zebra TC26(型号:TC26BK-11A222-A6),并通过扫描对多人进行打卡。接下来,应用程序会跟踪手机的 GPS 位置,以定位在哪个字段中执行活动。然后,农民可以更准确地计算每块田地的成本。

这个功能在 android 10 之前都工作得很好。现在我的设备上在 1 小时或 1 小时 30 分后我没有得到新的位置。在另一台设备上,我有时会得到更长的时间,但也会停止。从Android 10开始我遇到了问题,我在网上找到了很多信息,但似乎并没有解决问题。正常工作日:

  • 早上 8 点左右开始。然后设备放在口袋里直到午餐
  • 下午 1:00 至 1:30 之间吃午餐,然后设备再次放入口袋。
  • 下午5点左右结束。

所以在工作期间他们不使用手机。

额外的

  • 过去我尝试在屏幕上使用唤醒锁。这适用于 android 8/9 再次激活 GPS。但这不适用于 Android 10/11
  • 我还添加了后台位置访问(虽然不是必需的),但看看我是否可以启用“始终位置”(如果这有影响)。
  • antiDoze 服务也是几年前推出的用于保持 CPU 唤醒的服务。请注意,通知的channelID 是相同的。我不知道这是否有影响。
  • 我还在我的应用程序中看到,大多数时候(比如 99%)服务器仍然从设备接收数据,但位置是空的。在 1% 的情况下,设备不发送数据。
  • 我不使用熔断器位置提供程序,因为并非所有设备都有 GMS 服务。
  • 答案可能是我需要重写一些东西。对我来说这不是问题,因为我的最终目标是拥有一个可用的产品。如果是这种情况,请向我提供详细的计划以及放置内容的位置,或者提供教程的链接。

清单:(我遗漏了一些权限和 antiDozeService,因为我认为它们与 GPS 部分无关)

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

 <activity android:name=".SplashActivity"
           android:theme="@style/SplashTheme">
               <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
                  <category …
Run Code Online (Sandbox Code Playgroud)

android location android-gps android-10.0 android-11

5
推荐指数
1
解决办法
2253
查看次数

如何计算当前方向与GPS点之间的角度

我有 2 个点(Android Location 对象):当前位置和目标位置。我还有设备的方向(以度为单位)。

在此输入图像描述

我想计算目标位置和方向之间的角度。怎样做才正确呢?

我从 FusedLocationProvider 接收位置(如果有的话)。现在我只用

float requiredAngle = Math.abs(location.getBearing() - 180 - target.bearingTo(location));

float angleBetween = Math.abs(requiredAngle - location.getBearing()); 它返回的角度不正确。

我想我应该计算真北和磁北之间的差异并添加设备方向。然后使用 currentPosition.bearingTo(target),并从方位中减去设备方向。

java geometry android android-gps

5
推荐指数
1
解决办法
289
查看次数