Android在使用requestLocationUpdates()时如何从意图中获取信息

Posted

技术标签:

【中文标题】Android在使用requestLocationUpdates()时如何从意图中获取信息【英文标题】:Android how to get information from intent when using requestLocationUpdates() 【发布时间】:2015-07-15 13:28:09 【问题描述】:

我正在尝试在后台获取我的位置,我了解到您需要一个 Pending Intent。

我的位置接收器似乎每 10 秒收到一次 Intent,正如我在位置请求中指定的那样。

我的问题是我在位置接收器中的位置始终为空...

感谢您的帮助:)

这是我的代码:

   /**
     * Runs when a GoogleApiClient object successfully connects.
     */
    @Override
    public void onConnected(Bundle connectionHint) 

        Intent mIntent = new Intent(context, LocationReceiver.class);
        PendingIntent mPendingIntent = PendingIntent.getBroadcast(context, 42, mIntent, PendingIntent.FLAG_CANCEL_CURRENT);

        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mPendingIntent);
    

这是我的 xml 文件的一部分:

        <receiver
            android:name=".LocationReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.myapp.databerries.LOCATION_READY" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

这是我的 LocationReciever 文件:

public class LocationReceiver extends BroadcastReceiver 
    public LocationReceiver() 
    

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

        Bundle b = intent.getExtras();
        Location loc = (Location)b.get(android.location.LocationManager.KEY_LOCATION_CHANGED);
        if (loc != null)
            Log.d("hello", "location = " + loc.toString());
        else
            Log.d("hello", "location = null");
    

【问题讨论】:

【参考方案1】:

您使用了错误的常量 - 而不是LocationManager.KEY_LOCATION_CHANGED(解析为"location"),根据requestLocationUpdates() documentation,您应该使用FusedLocationProviderApi.KEY_LOCATION_CHANGED(解析为"com.google.android.location.LOCATION"

【讨论】:

以上是关于Android在使用requestLocationUpdates()时如何从意图中获取信息的主要内容,如果未能解决你的问题,请参考以下文章

使用 requestLocation 只请求一次用户的位置

如何在继续之前等待 requestLocation?

requestLocation() 不请求许可,即使“下次询问”被勾选

调用 requestLocation() 时的“线程 1:信号 Sigabrt”

CoreLocation CLLocationManager requestLocation 需要 10 秒才能得到回调

Android:使用FusedLocationProviderClient获取一次位置?