3

このようにして近接アラートを作成します

    private void setProximityAlert(float radius, double lat, double lng, String place)
{
    long expiration = -1;
    LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Intent intent = new Intent(TREASURE_PROXIMITY_ALERT);
    intent.putExtra("lat", lat);
    intent.putExtra("lng", lng);
    intent.putExtra("place", place);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), -1, intent, 0);   
    locManager.addProximityAlert(lat, lng, radius, expiration, pendingIntent);
}

私の活動では、この方法で受信者を登録しました

    IntentFilter intentFilter = new IntentFilter(TREASURE_PROXIMITY_ALERT);
    registerReceiver(new ProximityIntentReceiver(), intentFilter);
    setProximityAlert(10, 45.150344, 9.999815, "POINT1");

私の放送受信機は正しく呼び出されます。では、別の近接アラートを追加したいのですが、可能ですか? 2 近接警報で同じ放送受信機を呼び出してほしい。私はこれを作りました:

    IntentFilter intentFilter1 = new IntentFilter(TREASURE_PROXIMITY_ALERT1);
    registerReceiver(new ProximityIntentReceiver(), intentFilter1);        
    setProximityAlert(200f, 45.143848, 10.039741, "POINT2");

しかし、それは機能しません。何も起こりません。私は本当に今それに取り組んでおり、それが正しい方法であるかどうか疑問に思っていました. 私の意図は、2 つのアラートをトリガーすることです。1 つは GPS が位置 POINT1 を取得したとき、もう 1 つは位置 POINT2 を取得したときです。どんな助けでも大歓迎です。

4

1 に答える 1

6

setActionシステムが 2 つのインテントを異なると見なすように、固有のものを使用する必要があります。そうしないと、最初のインテントが再利用される傾向があります。

私はこのコードを持っています:

Intent intent = new Intent(this,PlacesProximityHandlerService.class);
intent.setAction("foo"+objPlace.getId());
intent.putExtra(Poi._ID, objPlace.getId());
intent.putExtra(Poi.LAT, objPlace.getLat());
intent.putExtra(Poi.LON, objPlace.getLon());
PendingIntent sender = PendingIntent.getService(this,0, intent, 0);
LocationUtils.addProximity(this, objPlace.getLat(),objPlace.getLon(), objPlace.getError(), -1,sender);

また、近接アラートはちょっとトリッキーに機能することに注意してください。

ユーザーは、設定した信号精度と半径に基づいてホット ZONE1 に入ります。ブロードキャストは、entering=true ZONE1 に対して起動されます。現在のゾーンと重複する別のゾーン ZONE2 に入ると、まだ ZONE1 にいるため、アラートは表示されません。ZONE1 を離れる必要があるため、entering=false でブロードキャストが再び開始されます。したがって、ZONE1 を離れて ZONE2 に到着すると、ZONE2 に入るとブロードキャストが開始されます。

テストしましたが、問題なく動作します。市場Location Spooferから無料のアプリケーションを入手して、電話の場所を偽装します。また、電話の設定でモックの場所を有効にする必要があります。そして、アプリケーションにパーミッションを追加します:

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

私がすることは、自分の場所を私から遠く離れた場所 (おそらくグリーンランド) に設定し、ZONE1 をトリガーするゾーンに位置を設定すると、ブロードキャストが開始されます。次に、私の場所をグリーランドに再度設定し、ZONE2 をトリガーする位置を設定すると、ブロードキャストが開始されます。

入るフラグはインテント エクストラから取得できます

Bundle b = intent.getExtras();
Boolean entering = (Boolean) b.get(android.location.LocationManager.KEY_PROXIMITY_ENTERING);

上記のコードを使用して、100 個の POI の近接アラートをセットアップしましたが、すべてうまく機能しました。

于 2010-07-21T11:17:36.740 に答える