0

我的应用程序使用LocationServices来请求位置更新。它通过PendingIntent将结果发送到Receiver。在onReceive ()中,从 Intent 中提取 LocationResult,从而产生一个Location 然后用LatLng表示,以供进一步使用。听起来不错,对吧?

好吧,应用程序开始因NullPointerException而崩溃。

我使用Debugger进行了调查,发现我上面描述的三行代码执行得很好,但是,然后,不是继续执行以下代码行,而是以某种方式再次将执行引导回三行中的第一行,这会提取LocationResult从一个意图。现在结果为 null,并在下一行发生NullPointerException崩溃,因为 LocationResult被假定为不为 null。

我不知道为什么会这样。请问有什么指点吗?(对不起双关语)

这是我的代码:

public class MyLocationUpdateReceiver extends BroadcastReceiver {

    private static final String TAG = "MyLocationUpdateRcvr";

 // empty constructor
    public MyLocationUpdateReceiver(){}

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.i(TAG,"onReceive update");

        // extract locationResult from intent received from Update Request
        LocationResult locationResult = LocationResult.extractResult(intent);
        double locationLat = locationResult.getLastLocation().getLatitude();
        double locationLng = locationResult.getLastLocation().getLongitude();

        // send the Lat and Lng of new location to MapActivity via intent
        Intent mIntent = new Intent(context.getApplicationContext(), 
        MapActivity.class);
        mIntent.putExtra("New_Lat", locationLat);
        mIntent.putExtra("New_Lng", locationLng);
        mIntent.addFlags(FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(mIntent);

    }
}

这是第一次通过的屏幕截图。注意 LocationResult 不为空。

在此处输入图像描述

还在第一轮...

在此处输入图像描述

在第二轮...

在此处输入图像描述

4

2 回答 2

1

是否存在将额外内容放入 PendingIntent 的情况?经过一些测试,我发现这会导致位置信息在传递给接收器时不会存储在意图中。看起来他们应该能够按照您的意图将这些位置与附加功能放在一起,但它并没有以这种方式实现。

于 2019-05-16T19:12:40.083 回答
0

我假设您在清单中注册时正在使用您的接收器。您需要使用带有 java 编码的广播接收器,我的意思是动态绑定。有关如何绑定的详细信息,您可以参考以下链接。

动态注册广播接收器

其次,您也可以尝试在传递 LocationResult.extractResult(intent); 时不传递意图。在 onReceive() 方法中评估意图

于 2017-02-20T13:14:31.177 回答