接近警报是否需要我的应用程序的坐标更新?

时间:2013-04-02 23:13:17

标签: android location alert updates proximity

我正在开发一款可以使用邻近警报触发某些功能的应用。我已经挖掘了一些教程和示例,设置了一些警报,似乎工作有点好。但是,当我关闭应用程序时,(我将locationManager.removeUpdates()称为不再接收更新),警报似乎不断发生。

所以我的问题是,我是否真的需要为警报api提供gps修复?或者系统是否自己获得它并且我不需要担心它,除非创建一个新的,你需要那些coords?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您不必使用请求位置更新 - 您只需取消注册接收器即可停止警报

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.Toast;

public class ProximityService extends Service {

    String proximitysd = "com.apps.ProximityService";
    int n = 0;
    private BroadcastReceiver mybroadcast;
    private LocationManager locationManager;

    public ProximityService() {}

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

    @Override
    public void onCreate() {
        mybroadcast = new ProximityIntentReceiver();
        locationManager = (LocationManager) 
                getSystemService(Context.LOCATION_SERVICE);
        double lat;
        double lng;
        float radius = 50f;
        long expiration = -1;
        MyDBAdapter db = new MyDBAdapter(this);
        Cursor cursor;
        db.read();
        cursor = db.getAllEntries();
        boolean go = cursor.moveToFirst();
        while (cursor.isAfterLast() != true) {
            lat = cursor.getInt(MyDBAdapter.LATITUDE_COLUMN) / 1E6;
            lng = cursor.getInt(MyDBAdapter.LONGITUDE_COLUMN) / 1E6;
            String what = cursor.getString(MyDBAdapter.ICON_COLUMN);
            String how = cursor.getString(MyDBAdapter.TYPE_COLUMN);
            String proximitys = "com.apps.ProximityService" + n;
            IntentFilter filter = new IntentFilter(proximitys);
            registerReceiver(mybroadcast, filter);
            Intent intent = new Intent(proximitys);
            intent.putExtra("alert", what);
            intent.putExtra("type", how);
            PendingIntent proximityIntent = PendingIntent.getBroadcast(this, n,
                    intent, PendingIntent.FLAG_CANCEL_CURRENT);
            locationManager.addProximityAlert(lat, lng, radius, expiration,
                    proximityIntent);
            // sendBroadcast(new Intent(intent));
            n++;
            cursor.moveToNext();
        }
        db.close();
        cursor.close();
    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, "Proximity Service Stopped", Toast.LENGTH_LONG)
                .show();
        unregisterReceiver(mybroadcast);
    }

    @Override
    public void onStart(Intent intent, int startid) {
        Toast.makeText(this, "Proximity Service Started", Toast.LENGTH_LONG)
                .show();
        // IntentFilter filter = new IntentFilter(proximitys);
        // registerReceiver(mybroadcast,filter);
    }

    public class ProximityIntentReceiver extends BroadcastReceiver {

        private static final int NOTIFICATION_ID = 1000;

        @Override
        public void onReceive(Context arg0, Intent arg1) {
            String key = LocationManager.KEY_PROXIMITY_ENTERING;
            Boolean entering = arg1.getBooleanExtra(key, false);
            String here = arg1.getExtras().getString("alert");
            String happy = arg1.getExtras().getString("type");
            if (entering) {
            }
            NotificationManager notificationManager = (NotificationManager) 
                    getSystemService(Context.NOTIFICATION_SERVICE);
            PendingIntent pendingIntent = PendingIntent.getActivity(arg0, 0,
                    arg1, 0);
            Notification notification = createNotification();
            notification
                    .setLatestEventInfo(arg0, "Proximity Alert!",
                            "You are approaching a " + here + " marker.",
                            pendingIntent);
            notificationManager.notify(NOTIFICATION_ID, notification);
        }

        private Notification createNotification() {
            Notification notification = new Notification();
            notification.icon = R.drawable.icon;
            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;
        }
        // make actions
    }
}