0

我的 Roximity SDK 不断崩溃,

这是我的摇篮:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':cropper')
compile project(':main')
compile project(':ROXIMITY_SDK_1_3_73')
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.google.code.gson:gson:2.2.4'
compile 'org.slf4j:slf4j-api:1.7.10'
compile 'com.google.android.gms:play-services-base:8.4.0'
compile 'com.google.android.gms:play-services-location:8.4.0'
compile 'com.google.android.gms:play-services-ads:8.4.0'
compile 'com.google.android.gms:play-services-identity:8.4.0'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
compile 'org.apache.httpcomponents:httpmime:4.5.2'
compile 'com.loopj.android:android-async-http:1.4.9'
compile 'com.android.support:appcompat-v7:23.1.1'

我的清单:

我正在根据文档页面上提到的说明使用代码http://docs.roximity.com/mobile/android/integration,在 onCreate 中:

ROXIMITYEngine.startEngineWithOptions(this.getApplicationContext(),  R.drawable.ic_launcher, null, this, null);
createBroadcastRecievers();

定义:

private void createBroadcastRecievers(){
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(ROXConsts.MESSAGE_FIRED);
    intentFilter.addAction(ROXConsts.BEACON_RANGE_UPDATE);
    intentFilter.addAction(ROXConsts.WEBHOOK_POSTED);

    LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, intentFilter);
}
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(ROXConsts.MESSAGE_FIRED)) {
            MessageParcel messageParcel = (MessageParcel)intent.getParcelableExtra(ROXConsts.EXTRA_MESSAGE_PARCEL);
            handleMessageFired(messageParcel);
        } else if (intent.getAction().equals(ROXConsts.BEACON_RANGE_UPDATE)){
            String rangeJson = intent.getStringExtra(ROXConsts.EXTRA_RANGE_DATA);
            handleBeaconRangeUpdate(rangeJson);
        }
    }
};

现在它的行为完全奇怪。有时它根本没有检测到信标并发送空包作为响应。有时会在几分钟内检测到信标,并且在一两次更新后大多会崩溃。这是崩溃报告:致命异常:主进程:

java.lang.NullPointerException:尝试从 android.location 的 android.location.Location.set(Location.java:131) 的空对象引用上的字段“java.lang.String android.location.Location.mProvider”读取。 Location.(Location.java:124) at com.roximity.sdk.location.RoxLocation.(RoxLocation.java:30) at com.roximity.sdk.actions.bb(ActionManager.java:265) at com.roximity.sdk .actions.bc(ActionManager.java:213) 在 com.roximity.sdk.beacons.cc(RangingManager.java:169) 在 com.roximity.sdk.beacons.cb(RangingManager.java:107) 在 com.roximity.sdk.beacons.ca(RangingManager.java :84) 在 com.roximity.system.ble.dj(BluetoothScanController.java:286) 在 com.roximity.system.ble.f.run(BluetoothScanController.java:257) 在 android.os.Handler。handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java :5835) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os 的 java.lang.reflect.Method.invoke(Native Method)。ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

我已经尝试了几乎所有可能的解决方案,这不是应用程序端的问题,也没有通过更改他们推荐的代码来解决。任何解决方案都将受到高度赞赏。

4

1 回答 1

1

希望能有所帮助的几件事:

  • 我看到的最令人担忧的是com.roximity.roximitysdkstarterkit.R.raw.roxstoreROXIMITYEngine.startEngineWithOptions()调用中的第二个参数 。文档将该参数描述为“将为通知显示的可绘制 id,例如 R.drawable.ic_launcher。” 将此参数替换为应用程序资源目录中可绘制对象的 id。
  • 从您的 Gradel 依赖项看来,您可能正在使用不受支持的 SDK 版本1.3.71。与 Google Play Services 8.4.0 一起运行的最早受支持的 SDK 版本是1.3.73。确保您使用的是受支持的 .aar 并将其正确链接到您的项目。
  • Android Compatibility v7,用于支持旧版本的 Android,您的 Gradel 依赖项似乎也缺少依赖项。确保添加compile 'appcompat-v7:23.1.1'到您的依赖项列表中。
  • 它还显示在您的依赖项中,您正在编译整个 Google Play 服务库,并且还包括各个模块的行,虽然这在技术上并没有错 - 您应该考虑只导入您的代码所需的 Google Play 服务模块。对于 ROXIMITY v1.3.73 SDK,唯一需要的模块是;基础、gcm 和位置。

编辑

查看您的崩溃堆栈跟踪,当尝试从 Location 对象中检索 mProvider 字段时,显示的错误是空引用。似乎此崩溃是代码期望 Location 对象的结果,可能来自 FusedLocationApi,但接收到 null。也许对 FusedLocationApi 如何以及为何返回 null 对象进行一些研究将是您继续努力的好地方。

以下是一些帮助您入门的链接:

为什么 FusedLocationApi.getLastLocation 为空

FusedLocationApi.getLastLocation 始终为空

于 2016-03-24T18:27:36.123 回答