0

我的应用程序找到用户的位置。我正在尝试设置接近警报。该应用程序使用 ZXing 扫描仪扫描二维码。qrcode 具有我读入应用程序的 lon/lat 值。我想将用户的当前位置与存储在 qrcode 上的值进行比较,并确定用户是否在给定的容差(半径)内。

ProximityIntentReceiver 中的 onReceive 方法永远不会被调用。任何想法为什么?谢谢。

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 String TAG = ProximityIntentReceiver.class.getSimpleName(); 
        private static final int NOTIFICATION_ID = 1000;

        @Override
        public void onReceive(Context context, Intent intent) {
             Log.e(TAG, "inside prox onreceive");
            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 near your point of interest.", pendingIntent);

            notificationManager.notify(NOTIFICATION_ID, notification);

        }

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

            notification.icon = R.drawable.ic_launcher;
            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.ledARGB = Color.WHITE;
            notification.ledOnMS = 1500;
            notification.ledOffMS = 1500;

            return notification;
        }

    }

.

import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;

public class LocationService extends Service {

    private static final String TAG = LocationService.class.getSimpleName();
    LocationManager             mlocManager;
    LocationListener            mlocListener;
    NfcScannerApplication       nfcscannerapplication;
    private static final String PROX_ALERT_INTENT = "com.carefreegroup.ProximityAlert";
    Intent intent;
    PendingIntent proximityIntent;
    ProximityIntentReceiver pir;

    @Override
    public void onCreate() {

        nfcscannerapplication = (NfcScannerApplication) getApplication();
        mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        mlocListener = new MyLocationListener();
        pir = new ProximityIntentReceiver();
        intent = new Intent(PROX_ALERT_INTENT);
        proximityIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

        Log.e(TAG, "Service created and location manager and listener created");
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        mlocManager.removeUpdates(mlocListener);
        unregisterReceiver(pir);
        Log.e(TAG, "Service destroyed");
        super.onDestroy();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);

        Log.e(TAG, "requesting location updates");
        super.onStart(intent, startId);
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    private class MyLocationListener implements LocationListener {


        @Override
        public void onLocationChanged(Location loc) {



            Log.e(TAG, "about to set geopoints in application object");
            nfcscannerapplication.setLat(loc.getLatitude());
            nfcscannerapplication.setLon(loc.getLongitude());

            fireLocationChangeEvent(loc.getLongitude(), loc.getLatitude());

            mlocManager.addProximityAlert(53.653480529785156, -1.51961088180542, 2, -1, proximityIntent );

            IntentFilter filter = new IntentFilter(PROX_ALERT_INTENT); 
            registerReceiver(pir, filter);

              sendBroadcast(intent);

        }
4

1 回答 1

0

请查看此 Proximity Alert 以了解存储在服务器中的位置坐标

问题略有不同,但您需要使用它的方法。

我认为这要简单得多。

于 2012-10-03T14:49:33.147 回答