这里 Maps Android SDK 调用 PositioningManager start 方法返回 false

2023-12-09

我读了这个问题并尝试了它的答案,但它对我不起作用。

我做了一个非常简单的测试应用程序,清单如下:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="22"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:ignore="GoogleAppIndexingWarning">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <meta-data
        android:name="com.here.android.maps.appid"
        android:value="itkC4uIay69MXXXXXXXX" />
    <meta-data
        android:name="com.here.android.maps.apptoken"
        android:value="NdT8laoCmRysyhXXXXXXXX" />

    <service
        android:enabled="true"
        android:exported="false"
        android:name="com.here.services.internal.LocationService"
        android:process=":remote">
    </service>

</application>

我应该澄清我添加了这些东西,但是这一行

android:name="com.here.services.internal.LocationService"

在 Android Studio 中从“services”一词开始显示为红色(尽管全部编译,我假设有问题)

这是我的主要活动

package com.company.Application;

import android.Manifest;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.here.android.mpa.common.GeoCoordinate;
import com.here.android.mpa.common.GeoPosition;
import com.here.android.mpa.common.PositioningManager;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

    private static final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
            Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE };

    // permissions request code
    private final static int REQUEST_CODE_ASK_PERMISSIONS = 9893;

    private Timer tickMinTimer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        checkPermissions();
    }

    private void setUpPositioning() {
        PositioningManager pm = PositioningManager.getInstance();
        PositioningManager.LocationStatus  ls = pm.getLocationStatus(PositioningManager.LocationMethod.GPS_NETWORK);
        Log.i("Position", "Setting up positioning");
        if (ls ==  PositioningManager.LocationStatus.AVAILABLE) {
            Log.i("Position", "Positioning is available");
        } else {
            Log.w("Position", "Positioning not available right now: " + ls.toString());
        }
        boolean ret = pm.start(PositioningManager.LocationMethod.GPS_NETWORK);
        Log.i("Position", "Positioning start returns " + ret);
        timerTickEveryMinute();
    }

    private void timerTickEveryMinute() {
        tickMinTimer = new Timer();
        tickMinTimer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                // going to try to get the location here - if not once a minute then once every x minutes
                GeoPosition pos = PositioningManager.getInstance().getPosition();
                if (pos == null) {
                    Log.w("Position", "GeoPosition is Null");
                } else {
                    GeoCoordinate coord = pos.getCoordinate();
                    Log.i("Position", "Location: Latitude = " + coord.getLatitude() + ", Longitude = " + coord.getLongitude());
                    Log.i("Position", "Accuracy = " + pos.getLatitudeAccuracy() + ", " + pos.getLongitudeAccuracy());
                }
            }
        }, 5000, 1000*60);
    }

    // check for permissions
    /**
     * Checks the dynamically controlled permissions and requests missing permissions from end user.
     */
    protected void checkPermissions() {
        final List<String> missingPermissions = new ArrayList<String>();
        // check all required dynamic permissions
        for (final String permission : REQUIRED_SDK_PERMISSIONS) {
            final int result = ContextCompat.checkSelfPermission(this, permission);
            if (result != PackageManager.PERMISSION_GRANTED) {
                missingPermissions.add(permission);
            }
        }
        if (!missingPermissions.isEmpty()) {
            // request all missing permissions
            final String[] permissions = missingPermissions
                    .toArray(new String[missingPermissions.size()]);
            ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_ASK_PERMISSIONS);
        } else {
            final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
            Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
            onRequestPermissionsResult(REQUEST_CODE_ASK_PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
                    grantResults);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
                                           @NonNull int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_PERMISSIONS:
                for (int index = permissions.length - 1; index >= 0; --index) {
                    if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
                        // exit the app if one permission is not granted
                        Toast.makeText(this, "Required permission '" + permissions[index]
                                + "' not granted, exiting", Toast.LENGTH_LONG).show();
                        finish();
                        return;
                    }
                }
                final List<String> missingPermissions = new ArrayList<String>();

                for (final String permission : REQUIRED_SDK_PERMISSIONS) {
                    final int result = ContextCompat.checkSelfPermission(this, permission);
                    if (result != PackageManager.PERMISSION_GRANTED) {
                        missingPermissions.add(permission);
                    }
                }
                if (missingPermissions.isEmpty()) {
                    // all permissions were granted
                    setUpPositioning();
                }
                break;
        }
    }

}

因此,pm.start() 始终返回 false,当然 GeoPosition 始终为 null。所有权限均已授予,并且手机上所有 GPS 等均已打开。

也许这很简单,但有人能看到缺少什么吗? - 我想要的只是让我的应用程序每分钟检查一次位置。此代码不适用于免费增值模式吗?


根据@HERE开发人员支持的建议,我已经使这个示例正常工作=代码更改如下:

private void setUpPositioning() {
    // new lines from HERE
    MapEngine.getInstance().init(this, new OnEngineInitListener() {
        @Override
        public void onEngineInitializationCompleted(Error error) {
            if (error == Error.NONE) {
                Log.i("Position", "correctly started map engine");
            } else {
                Log.i("Position", "Problem setting up map engine: " + error);
            }
        }
    });
    //end of lines from HERE
    PositioningManager pm = PositioningManager.getInstance();
    PositioningManager.LocationStatus  ls = pm.getLocationStatus(PositioningManager.LocationMethod.GPS_NETWORK);
    Log.i("Position", "Setting up positioning");
    if (ls ==  PositioningManager.LocationStatus.AVAILABLE) {
        Log.i("Position", "Positioning is available");
    } else {
        Log.w("Position", "Positioning not available right now: " + ls.toString());
    }
    boolean ret = pm.start(PositioningManager.LocationMethod.GPS_NETWORK);
    Log.i("Position", "Positioning start returns " + ret);
    timerTickEveryMinute();
}

现在我收到这样的日志:

2019-01-27 12:02:51.716 1790-1790/com.company.app I/Position: Setting up positioning
2019-01-27 12:02:51.716 1790-1790/com.company.app W/Position: Positioning not available right now: TEMPORARILY_UNAVAILABLE
2019-01-27 12:02:51.745 1790-1790/com.company.app I/Position: Positioning start returns true
2019-01-27 12:02:51.760 1790-1790/com.company.app I/Position: Problem setting up map engine: MISSING_PERMISSION
2019-01-27 12:02:56.749 1790-2674/com.company.app I/Position: Location: Latitude = 31.8051461, Longitude = 35.092536
2019-01-27 12:02:56.750 1790-2674/com.company.app I/Position: Accuracy = 19.71, 19.71

我不确定我缺少什么权限,但这似乎并不重要,因为代码现在可以工作...不幸的是,它在我更复杂的应用程序中不起作用:-(。提到了更复杂的应用程序here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这里 Maps Android SDK 调用 PositioningManager start 方法返回 false 的相关文章

  • 在 Android 中动态填充年份的微调器?

    我一直在绞尽脑汁试图让它发挥作用 我想动态地将 1900 年到当前年份的年份输入到旋转器中 我认为使用 XML 定义的数组不可能做到这一点 但是我可以使用数组适配器来做到这一点吗 这是我到目前为止所拥有的 ArrayList
  • APK META-INF/library_release.kotlin_module 中复制的重复文件

    我最近通过 JitPack 添加了两个 Android 库 但出现以下错误 Duplicate files copied in APK META INF library release kotlin module 我已经清除了缓存 并尝试使
  • 如何使用 Android 版 Facebook 同步的联系人图片

    我的手机上安装了 Android 版 Facebook 它会自动将联系人列表中人员的 FB 个人资料图片同步到我的手机 我想在我访问的应用程序中使用这些图片ContactsContract PhoneLookup 我真的需要 Faceboo
  • fresco 的 Proguard 错误

    我正在使用 ProGuard 当我在发布配置中运行项目时 出现以下错误 Warning com facebook imagepipeline bitmaps DalvikBitmapFactory can t find referenced
  • 如何在 Android 中创建刮刮卡?

    我需要为我在学校的期末项目创建一个 刮刮卡 应用程序 但找不到如何实现刮刮事件的方法 如何创建背景图像并在其上放置灰色矩形 所以当我刮刮这些矩形时我会看到他们下面的图片 实现必须在 Android 中 因为我还不知道如何在 Objectiv
  • 如何在 android-studio 0.3.6 中运行 Gradle 1.9?

    我只是花了一些时间尝试将现有的 android studio 项目从 gradle 1 8 迁移到 gradle 1 9 Final 昨天发布 但失败了19th Nov 我在这里阅读了大多数其他与 gradle 相关的帖子 但没有一个对我有
  • Android,语言文件不起作用

    我现在正在创建一个 Android 应用程序 并尝试为我的母语添加语言文件 但在某种程度上 这对我不起作用 我尝试在两部不同的手机中加载该应用程序 但结果相同 之前创建过语言文件 效果良好 但这次不行 手机设置为瑞典语 语言文件适用于我创建
  • 将寻呼机视为列表视图行项目

    我有一个包含 20 行的列表视图 我想为列表视图中的每一行设置一个视图寻呼机 由于列表视图的行中的项目可能是一个或多个 并且我想使用视图分页器显示列表视图行项目 为此 我使用以下代码 将显示在列表视图行中的自定义布局 作为分页器项目
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • 如何从debug.keystore文件获取MD5?

    我使用一些命令来获取 MD5 私钥debug keystore文件 但实际上我得到的是 SHA1 私钥而不是 MD5 我不知道如何获得MD5 这是我使用的命令 keytool list alias androiddebugkey keyst
  • 来自外部 XML 的 Android 本地化

    是否可以使用从服务接收到的 XML 在运行时翻译 Android 应用程序 如果可能的话 请有人指出我正确的方向 谢谢 Warning 我读到的所有内容都表明 让您的应用程序更改语言不是一个好主意 因为 Android 框架不支持它 并且可
  • BluetoothLeScanner 服务内部问题

    Update从Android 10以上我认为你需要ACCESS BACKGROUND LOCATION权限 因此 如果此代码在最新的 Android 版本上不起作用 就是针对此问题的 ACCESS BACKGROUND LOCATION 受
  • ImageButton 拉伸背景图像

    我正在尝试创建一个没有边框的 ImageButton 但遇到了图像按钮大小的问题 我使用 Eclipse ADT 将 ImageButton 拖到布局中并选择背景图像 图像按钮显示如下 正如您所看到的 背景图像和图像按钮周边之间有一个边框
  • NoClassDefFoundError:com.google.firebase.FirebaseOptions

    我继续得到NoClassDefFoundError在我正在使用的其他测试设备 4 4 2 上 但在我的测试设备 Android 5 1 上运行良好 我尝试了用谷歌搜索的解决方案 但似乎没有任何效果 我正在使用 Firebase 实时数据库
  • 在Android的activity中调用onResume

    在活动的过程中通过调用 this OnResume 强制 onResume 事件可以吗 或者我应该实现另一个由 OnResume 和第一个成员调用的过程 实现在您的重写中调用的另一个过程onResume 后者不打算由您调用 它是一种方便的方
  • Android 将菜单项在操作栏中向左对齐

    我的应用程序中有一个操作栏 它显示我定义的菜单项res menu activity main xml 我的菜单项在操作栏上向右对齐 我希望它们左对齐 我为此找到的唯一解决方案使用了自定义操作栏 如下所示 将菜单项放置在 Honeycomb
  • Android apk 调试模式工作正常,但发布模式给出太多警告

    我正在尝试从 eclipse 获取签名的 APK 我有一个可调试的 apk 版本 运行良好 现在发布时 当我尝试使用 Eclipse ADT 进行编译和签名时 我收到很多警告 其中大部分是can t find superclass or i
  • 找不到资源矢量绘图的异常

    我将在某些设备上运行我的应用程序 其崩溃日志如下 01 04 16 54 02 206 7466 7466 com lawnmowers E AndroidRuntime FATAL EXCEPTION main Process com l
  • 如何用 XML 制作双渐变(类似 iphone)

    如何使用 XML 制作这种可绘制渐变 我可以做一个从颜色 A 到颜色 B 的简单渐变 但我不知道如何在同一个可绘制对象中组合两个渐变 我终于找到了一个带有图层列表的解决方案 这对我来说已经足够好了
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下

随机推荐

  • 自定义属性未被命中

    我创建了一个自定义属性 当它被击中时它会写入控制台 但它似乎没有被击中 这是微软教程 http msdn microsoft com en us library sw480ze8 aspx 正在2010年 net 4上运行 我猜一定是我做错
  • 关闭 AngularStrap 弹出框

    当我单击按钮时 会出现一个弹出窗口 如果单击弹出窗口内的按钮 则可以关闭该弹出窗口 但是 如果您单击另一个按钮打开弹出窗口 您将同时看到两个弹出窗口 而我只想保留一个 我尝试过使用触发器 焦点 但是如果我单击弹出窗口内的文本区域 它会关闭弹
  • 使用 php 进行 mysql 查询的进度条

    我正在尝试通过 mysql 查询的迭代来更新进度条 但我无法理解如何更新进度条 以及如何找到我已获取的行数 例如 query SELECT tvshows genres tvshows id show FROM tvshows where
  • Python pandas dataframe“Date”索引xlsx和csv中的不同格式

    我有一个包含多个选项卡的 xlsx 文件 每个选项卡都有一个Date列的格式为MM DD YYYY 将每个选项卡读入 pandas 数据帧 对每个选项卡应用一些操作 然后将数据帧写回两种格式 xlsx 和 csv 在 xlsx 文件中 Da
  • Ajax解析json字符串返回未定义,

    我正在发送一个帖子数据以获取 json 字符串 我的 JSON 字符串 error false success Added Website website id 12 我的阿贾克斯请求 publsher add website on sub
  • Flask 响应 - TypeError:“NoneType”对象不可调用 [重复]

    这个问题在这里已经有答案了 我正在尝试为 Flask REST 服务器创建一个 pytest 在其中一项测试中 我想获得服务器的响应 这是服务器的响应 return make response json dumps myName userN
  • 计算时间差并仅返回小时和分钟(在VB.net中)

    我正在开发一个计算时差的系统 如何比较两个时间 带日期 并获取差异的小时和分钟 示例1 datetime1 1 Apr 2014 01 05 04 AM datetime2 1 Apr 2014 02 05 04 AM 结果将是 datet
  • 如何将 numpy.savetxt 与包含数组的结构化数组一起使用

    假设我有一个结构化数组 如下所示 a np zeros 10 dtype label1 np int32 4 label2 np float 我尝试将其另存为 csv 文件 np savetxt output csv a fmt d d d
  • 使用scale_fill_gradientn将特定颜色分配给条形图中的确定值

    我有一个巨大的数据集 其中包含 20 名患者的一些参数的每分钟记录 通过可视化患者监测记录 IP 参数 我试图构建彩色条形图 所以我用了scale fill gradient r 中的函数 问题是 我想为一个确定的值 例如 IP 20 分配
  • 将新的 AcroForm 字段添加到 PDF

    我使用 iText 将数据填充到 PDF 中现有的 AcroForm 字段中 我现在正在寻找一种将新的 AcroForm 字段添加到 PDF 的解决方案 iText 可以做到这一点吗 如果是这样 我该怎么做 这记录在官方文档 更具体地说 在
  • 在 Yii2 中启用干净的 URL

    如何在 Yii2 中启用干净的 url 我想删除index php 和 来自 url 参数 为此需要在 Yii2 中编辑哪一部分 我在 yii2 中运行成功了 使能够mod rewrite for Apache For basic temp
  • 查找 MySQL 表中 EMPTY 或 NULL 列的计数

    我的 MySQL 表中有大约 30 列 我想计算特定行有多少列字段为空 该表用于存储用户信息 我想找出有多少个人资料字段 例如 姓名 年龄 位置 所有这些字段都存储在单独的列中 为空 尚未由用户填写 我想要细化的列是最后 20 列 因为前
  • VSCode / Virtual Studio Code:无法在 VSCode 终端中加载 Conda 环境

    我正在尝试切换到 VScode 使用内置终端与 Anaconda 交互 并且知道 VScode 支持 Anaconda 因为它随 Anaconda 一起提供 从文档和各种教程 视频中 我看到 conda 虚拟环境被识别 似乎是原生的 但我似
  • 使用内容脚本获取选项卡的 DOM

    我的 popup html 中有一个脚本 我试图通过它获取特定选项卡的 DOM 更具体地说 我试图确定当前页面上特定选项卡中是否存在特定元素 然后在 popup js 中使用此信息 我该怎么做呢 您无法从弹出窗口访问当前页面 DOM 为此
  • 在 Sphinx 中避免来自父级的文档字符串

    我使用 Sphinx 进行自动文档 但我发现它默认将父类文档字符串附加到我的文档字符串的方式很烦人 结果是 对于每个继承自的记录测试类unittest TestCase 我得到了文档字符串 创建一个类的实例 该实例在执行时将使用指定的测试方
  • 可以对故事板发表评论吗?

    因此 我一直在使用 Xcode 7 的新功能在故事板中引用故事板 为了使我的参考资料更加清晰 我想添加一些评论 以准确解释为什么我要拆分故事板 这个功能存在吗 我知道我可以创建一些虚拟视图 但我觉得这很懒而且效率有点低 In you 身份检
  • 在 struts 2 中的同一个操作方法中使用多个结果类型?

    我在操作方法中使用了结果类型流 该方法依赖于 ajax 调用 当焦点移出我的 JSP 上的文本字段时 会激活此 ajax 调用 此 AJAX 调用的功能是 如果用户输入的数据已存在于后端服务器中 则显示错误 基本上 服务器返回一个状态代码
  • 如何使用 C# 监控进程的 IO 活动?

    使用 FileSystemWatcher 我们可以监视特定文件系统的 IO 活动 但是是否有办法知道哪个正在运行的进程导致了该 IO 更具体地说 假设一个正在运行的进程即 abc exe 正在驱动器 D 上创建文件 text txt 我们可
  • 将数字格式化为始终具有符号和小数点分隔符[重复]

    这个问题在这里已经有答案了 我想将任何数字 整数或实数 格式化为字符串表示形式always has a sign 正或负 和小数点分隔符 但没有尾随零 一些样本 3 14 gt 3 14 12 00 gt 12 78 4 gt 78 4 3
  • 这里 Maps Android SDK 调用 PositioningManager start 方法返回 false

    我读了这个问题并尝试了它的答案 但它对我不起作用 我做了一个非常简单的测试应用程序 清单如下