2012-02-15 5 views
0

ダイナミックに作成されたオーバーレイの近接アラートを作成していますが、半径内でユーザが移動したときにブロードキャストレシーバが起動しないという問題があります。近接アラートレシーバが起動しない

private void registerIntents() { 
    for(int i = 0; i < points.size(); i++) { 
     double intentLat, intentLon; 
     intentLat = (int)(points.get(i).getLat() * 1E6); 
     intentLon = (int)(points.get(i).getLon() * 1E6); 
     setProximityAlert(intentLat, intentLon, i+1,i); 
    } 
} 
private void setProximityAlert(double lat, double lon, final long eventID, int requestCode) 
{ 
    // 100 meter radius 
    float radius = 100f; 

    // Expiration is 10 Minutes (10mins * 60secs * 1000milliSecs) 
    long expiration = 600000; 

    LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    int uniqueID = requestCode; 
    String intentAction = PROXIMITY_INTENT_ACTION + uniqueID; 

    //Intent intent = new Intent(PROXIMITY_INTENT_ACTION); 

    //intent.putExtra(ProximityAlertReceiver.EVENT_ID_INTENT_EXTRA, eventID); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), uniqueID, new Intent(intentAction), PendingIntent.FLAG_CANCEL_CURRENT); 
    mIntentFilter = new IntentFilter(intentAction); 
    locManager.addProximityAlert(lat, lon, radius, expiration, pendingIntent); 
} 

これは近接アラートを作成するためのコードであり、次のコードはブロードキャスト受信者を登録するためのコードです。私はonメソッドを作成しています。

 this.registerIntents(); 
    registerReceiver(new ProximityAlertReceiver(), mIntentFilter); 

私が成功しなかった数日間それを手掛けてきたので、本当に助けていただきありがとうございます。

これは、マニフェストファイルにある権限です。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
+0

ダイレクトインテントではなくブロードキャストインテントを使用する理由はありますか?マニフェストで適切なパーミッションを宣言して位置情報を受け取っていますか?ロケーションデータがまったく生成されていますか? – jsmith

+0

私はブロードキャストインテントとディレクテッドインテントのどちらが意味するのかよく分かりません。私はAndroidには新しく、このコードを使ったチュートリアルをいくつか見つけたので、それをやる方法だと思った。 – MillyMonster

答えて

0

あなたのクラスに直接行くことPendingIntentを使用してみてください:

Intent i = new Intent(this, MyActivity.class); 
    PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, i, 0);  

これはBroadcastReceiverを通過させるステップをスキップして、コードを簡素化します。まだ通知が表示されない場合は、LocationManagerが位置更新を生成していることを確認します。

+0

これは機能しませんでした。私はやり直す必要があると思う。私がしなければならないことを説明する簡単な近接アラートのチュートリアルを知っていますか?私は説明されていないランダムなコードを探し続けています。私を助けてくれてありがとう。 – MillyMonster

+0

これを試しましたか?[チュートリアル](http://www.javacodegeeks.com/2011/01/android-proximity-alerts-tutorial.html) – jsmith

+1

それは何だったのかを説明する答えを自分自身で追加すると役に立ちます誰か他の人が同じ問題でこの質問につまずいた場合に、間違っています。 –