Android:如何在Manifest中注册被动LocationListener?

时间:2012-03-22 13:12:58

标签: android gps locationlistener

我需要使用adndroid接收gps位置修复,但我不希望设备在Activity代码中显式注册LocationListener ...即我想直接在Manifest文件中注册LocationListener。

不幸的是,这不起作用:(这是我的代码:

<uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<receiver android:name=".GPSLocationListener" android:enabled="true">
    <intent-filter>
        <action android:name="android.location.LocationManager.KEY_LOCATION_CHANGED" />
    </intent-filter>
</receiver>

而我的听众看起来像这样:

public class GPSLocationListener implements LocationListener
{
    public void onLocationChanged(Location location)
    {
        Log.d(Config.LOGTAG, "GPSLocationListener.java: GPS LOCATION UPDATE CAUGHT");
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}
    public void onProviderEnabled(String provider) {}
    public void onProviderDisabled(String provider) {}
}

但无论我做什么,我都不会让模拟器抓住我通过DDMS推送的新(模拟)位置...... :(

有谁知道如何让这个工作?

4 个答案:

答案 0 :(得分:2)

看看Deep Dive into Location。 Reto Meier解释了如何通过PendingIntent将服务注册为被动LocationUpdate的接收者。

重要的一点是不要使用带有侦听器对象的requestLocation更新方法,而是使用接收methodsPendingIntent。这样,即使您收到gps修复或网络位置的所有活动都已完成,PendingIntent也会被触发并启动您的服务。
Reto Meier使用广播接收器for android.intent.action.BOOT_COMPLETED检查应用程序是否应在后台进行位置更新,然后使用PendingIntent请求位置更新。

答案 1 :(得分:1)

位置管理员不会广播位置更新。您必须以编程方式请求位置更新。

除了清单中的收件人声明是BroadcastReceiver之外,您的LocationListener不是BroadcastReceiver。这意味着如果有人发送了与您的过滤器匹配的braodcast,当类加载器尝试实例化BroadcastReceiver时,您会遇到类型不匹配。

答案 2 :(得分:0)

尝试使用LocationManager.requestLocationUpdates()方法注册待处理的意图:

LocationManager mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
Intent intent = new Intent("Unique_Broadcast_Message");       
PendingIntent launchIntent = PendingIntent.getBroadcast(your activity, 0, intent, 0);
mgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, launchIntent);

另外,声明接收“Unique_Broadcast_Message”的接收器。

答案 3 :(得分:0)

如果您想使用库,请检查一下。它使用被动位置提供程序,并按广播接收器提供。非常容易使用。

Little-Fluffy-Location Library for Android