如何使addProximityAlert()在状态栏中创建通知?

时间:2012-03-18 22:03:40

标签: android

我有一个应用程序,通知用户他们附近的物理位置(GPS)

最初我手动进行了位置接近检查,将当前纬度/经度与我们正在寻找的特定目标进行比较。如果它小于给定范围,则会创建通知。

在手动完成所有操作之后,我找到了addProximityAlert()方法,这正是我所需要的。我有一种手动创建通知的方法。

不幸的是,我不知道如何弥合手动调用通知和创建一个通过addProximityAlert()触发的意图之间的差距

public void SetupLocationListener()
{
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    if (useProximityAlerts)
    {
        SetupProximityAlerts(lm);
    }
    else
    {
        LocationListener ll = new mylocationlistener(this, tv);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, ll);
    }
}

这是我的手动创建通知的功能

    public void AlertUser(String title, String text)
{
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

    int icon = R.drawable.icon;
    CharSequence tickerText = "Location found.";
    long when = System.currentTimeMillis();

    notification = new Notification(icon, tickerText, when);

    Context context = getApplicationContext();
    CharSequence contentTitle = title;
    CharSequence contentText = text;
    Intent notificationIntent = new Intent(this, gps.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    final int HELLO_ID = 1;

    mNotificationManager.notify(HELLO_ID, notification);
}

这是我对addProximityAlert()

的不完整调用
lm.addProximityAlert(Double.parseDouble(allLocations[i][1]), Double.parseDouble(allLocations[i][2]), Integer.parseInt(allLocations[i][3].toString()), -1, INTENT_GOES_HERE);

那么如何将AlertUser()通知“转换”为PendingIntent,我可以将其作为变量传递给addProximityAlert()?

由于 凯文

1 个答案:

答案 0 :(得分:3)

步骤1:创建一个BroadcastReceiver实现作为公共类。

步骤2:将步骤#1中的接收者添加到<receiver>元素中的清单。

步骤3:使用PendingIntent.getBroadcast()创建指向该接收者的PendingIntent

步骤4:将您的加注 - Notification逻辑倒入接收者的onReceive()方法中,使用提供的Context获取NotificationManager等等。< / p>

步骤5:喝啤酒(或您所选择的休闲茶点,只要在您所在的辖区内合法)。