6

我想创建多个接近警报,但我不能得到它的工作...broadcastReceiver可以捕捉多个广播吗?

我认为广播接收机被覆盖,因此只处理最后一个广播。所以,如果我有两个点,只有最后创建的意图创建一个最后会产生一个警报...

我读我应该使用请求代码,但我不知道如何做到这一点...


我设立挂起的意图和广播接收方法...

private void addProximityAlert(double latitude, double longitude, String poiName, String intentfilter) { 

    Bundle extras = new Bundle(); 
    extras.putString("name", poiName); 
    Intent intent = new Intent(PROX_ALERT_INTENT+poiName); 
    intent.putExtras(extras);  
    PendingIntent proximityIntent = PendingIntent.getBroadcast(MainMenu.this, requestCode, intent, 0); 
    locationManager.addProximityAlert(
     latitude, // the latitude of the central point of the alert region 
     longitude, // the longitude of the central point of the alert region 
     POINT_RADIUS, // the radius of the central point of the alert region, in meters 
     PROX_ALERT_EXPIRATION, // time for this proximity alert, in milliseconds, or -1 to indicate no expiration 
     proximityIntent // will be used to generate an Intent to fire when entry to or exit from the alert region is detected 
    ); 
    requestCode++; 
    IntentFilter filter = new IntentFilter(intentfilter); 
    registerReceiver(new ProximityIntentReceiver(), filter); 
} 

我的广播接收器类

public class ProximityIntentReceiver extends BroadcastReceiver { 

private static final int NOTIFICATION_ID = 1000; 

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

    String key = LocationManager.KEY_PROXIMITY_ENTERING; 

    Boolean entering = intent.getBooleanExtra(key, false); 

    if (entering) { 
     Log.d(getClass().getSimpleName(), "entering"); 
    } 
    else { 
     Log.d(getClass().getSimpleName(), "exiting"); 
    } 

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, null, 0);   

    Notification notification = createNotification();   
    notification.setLatestEventInfo(context, 
     "Proximity Alert!", "You are approaching: " +intent.getExtras().get("name"), pendingIntent);  
                     //here------------------------------------- 
    notificationManager.notify(NOTIFICATION_ID, notification); 

} 

private Notification createNotification() { 
    Notification notification = new Notification(); 

    notification.icon = R.drawable.androidmarker; 
    notification.when = System.currentTimeMillis(); 

    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notification.flags |= Notification.FLAG_SHOW_LIGHTS;   
    notification.flags |= Notification.FLAG_INSISTENT; 

    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    notification.defaults |= Notification.DEFAULT_LIGHTS; 
    notification.defaults |= Notification.DEFAULT_SOUND; 

    notification.ledARGB = Color.WHITE; 
    notification.ledOnMS = 300; 
    notification.ledOffMS = 1500; 

    return notification; 
} 

} 

你能帮我吗?我真的坚持...

任何帮助将非常感谢!

回答

8

我得到它后,所有的工作......

正是我一直在寻找:http://www.gauntface.co.uk/blog/2010/01/04/proximity-alerts-in-android/

修改我做


private void addProximityAlert(double latitude, double longitude, String poiName) { 

    Bundle extras = new Bundle(); 
    extras.putString("name", poiName); 
    extras.putInt("id", requestCode); 
    Intent intent = new Intent(PROX_ALERT_INTENT); 
    intent.putExtra(PROX_ALERT_INTENT, extras); 
    PendingIntent proximityIntent = PendingIntent.getBroadcast(MainMenu.this, requestCode , intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    locationManager.addProximityAlert(
     latitude, // the latitude of the central point of the alert region 
     longitude, // the longitude of the central point of the alert region 
     POINT_RADIUS, // the radius of the central point of the alert region, in meters 
     PROX_ALERT_EXPIRATION, // time for this proximity alert, in milliseconds, or -1 to indicate no expiration 
     proximityIntent // will be used to generate an Intent to fire when entry to or exit from the alert region is detected 
    ); 
    requestCode++;  
} 

private void initialiseReceiver() 
{ 
    IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT); 
    registerReceiver(new ProximityIntentReceiver(), filter); 
} 

package michaels.pack; 

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.location.LocationManager; 
import android.util.Log; 

public class ProximityIntentReceiver extends BroadcastReceiver { 

private static final int NOTIFICATION_ID = 1000; 

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

    String key = LocationManager.KEY_PROXIMITY_ENTERING; 

    Boolean entering = intent.getBooleanExtra(key, false); 

    if (entering) { 
     Log.d(getClass().getSimpleName(), "entering receiverrrrrrrrrrrrrrrrrr"); 
    } 
    else { 
     Log.d(getClass().getSimpleName(), "exiting"); 
    } 

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, null, 0);   

    Notification notification = createNotification();   
    notification.setLatestEventInfo(context, 
     "Proximity Alert!", "You are approaching: " +intent.getBundleExtra("michaels.pack.ProximityAlert.").get("name"), pendingIntent);  
                     //here------------------------------------- 
    notificationManager.notify(intent.getBundleExtra("michaels.pack.ProximityAlert.").getInt("id"), notification); 

} 

private Notification createNotification() { 
    Notification notification = new Notification(); 

    notification.icon = R.drawable.androidmarker; 
    notification.when = System.currentTimeMillis(); 

    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notification.flags |= Notification.FLAG_SHOW_LIGHTS;     

    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    notification.defaults |= Notification.DEFAULT_LIGHTS; 
    notification.defaults |= Notification.DEFAULT_SOUND; 

    notification.ledARGB = Color.WHITE; 
    notification.ledOnMS = 300; 
    notification.ledOffMS = 1500; 

    return notification; 
} 

} 
+1

只是为了让你们都知道我在我的原始代码上发布了更新其中包括GitHub上的完整示例:http://www.gauntface.co.uk/pages/blog/2010/12/28/how-to-multiple-proximity-alerts-in-android/ –

+1

如何删除您的警报?我只是继续建设。 :( – deucalion0

+0

它已经有一段时间了,我真的不记得我做了什么对不起。 – mixkat

相关问题