0

私は最近、近接アラートアプリに取り組み始めました。これは基本的に、ユーザーの GPS 位置に基づいて着信音プロファイルを変更します (最初はバイブレーションまたは着信音のみ)。コーディング部分を完成させました。"enter" と "exit" で近接アラートが発生し、登録された BroadcastReceiver のコードが実行されています。この時点までは問題ありません。実際の問題は次のとおりです(私のサンプルコード行を使用)

2 つの Intent アクションに対して 1 つの BroadcastReceiver を登録しました。これらのインテント アクションは、次のように宣言されます。public static final String INTENT_ACTION2 = "org.droidmania.action.PROXIMITYALERT2 " ;

PendingIntent の部分は、

プライベートボイドsetProximityAlerts(文字列intentAction){インテントインテント=新しいインテント(); インテント.setAction(インテントアクション); // 呼び出しが HomeActivity からの場合、intentAction は INTENT_ACTION1 になり、それ以外の場合は INTENT_ACTION2 になります。

PendingIntent pIntent = PendingIntent.getBroascast(コンテキスト、0、インテント、PendingIntent.FLAG_CANCEL_CURRENT);

locationManager.addProximityAlert(緯度、経度、vRadius、-1、pIntent); }

次に、BroadcastReceiver コード、

クラス ProxyReceiver は BroadcastReceiver を拡張
します。

if(isEnter){
  **//if user is in Home location**
   if(intent.getAction().equals(INTENT_ACTION1)){  
     give the notification that user is in home area
  }
 **//if user is in Office location**
 if(intent.getAction().equals(INTENT_ACTION2)){
     give the notification that user is in office area
 }

} else{ //ユーザーが自宅の外にいる
場合 if(intent.getAction().equals(INTENT_ACTION1)){
ユーザーが自宅の外にいることを通知する } //ユーザーがオフィスの外にいる 場合 if(intent. getAction().equals(INTENT_ACTION2)){ ユーザーが不在であることを通知します } } }

これは、モバイルデバイスでテストした方法です。

  1. 自宅で、半径 10m の GPS 位置を設定しました。「ユーザーがホームエリアにいます」と通知されました

  2. その半径の外にいると、「ユーザーがホームエリアを出ました」というメッセージが表示されました。

  3. オフィスにいるときは、GPS の位置を半径 5m に設定しています。そのため、「ユーザーがオフィスエリアにいます」と通知されました。しかし、ここでは実際の問題に直面しています.2分または1分のギャップごとに「ホームエリアに入りました」と「オフィスエリアに入りました」と「ホームエリアから出ました」と「オフィスエリアから出ました」の両方のメッセージが表示されます. なぜそれが起こっているのかわかりません。 (オフィスの場所のGPSを設定した後も、動き回っていません..同じ場所にとどまっているだけです...オフィスのデスクの座席に座っています...)

    ここで何かを見逃しているか、余分なものを与えていますか? ホーム エリアを離れてから長い時間が経過しているのに、なぜ自宅付近でアラートが発生するのですか?

    みんな私を助けてください(私が費やした時間はすでに2週間です:-( )。あなたの助けに感謝します。

ありがとう。

4

1 に答える 1

2

ProximityAlert はパラメーター (緯度、経度、半径、PendingIntent) と共に保存されます。PendingIntent はその識別子です。

PendingIntent を区別するには、PendingIntent の requestCode 引数を使用します。

PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags);

したがって、質問の getBroadcast パラメータ(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)で、「0」を「home」PendingIntent と「office」PendingIntent の一意の整数に置き換えます。次に、各 PendingIntent を独自の緯度/経度/半径で に登録しますaddProximityAlert()

各 PendingIntent を一意にしないと、ProxAlert1(lat1, lon1, rad1, PendInt1) と ProxAlert2(lat2, lon2, rad2, PendInt1) がシステムの観点から同じアラート スペースを占めることになります。したがって、両方が両方の場所でトリガーされます。つまり、常に同時に出入りしています。

于 2011-11-17T21:56:28.390 に答える