0

この質問はすでに存在しますが、ソリューションの実装に問題があります。

私はこれらの質問をガイドラインとして使用しています:

サービスに基づく複数の近接アラート

同じブロードキャストで2つの近接アラートを設定します

受信者を登録する場所:

final String NEAR_YOU_INTENT = "neighborhood.crodgers.example.activities.PROXIMITY_ALERT";
IntentFilter filter = new IntentFilter(NEAR_YOU_INTENT);
registerReceiver(new LocationReceiver(), filter);

近接アラートが追加される場所(注:これはサービスで行われるため、コンテキストグラブ):

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
final String NEAR_YOU_INTENT = "neighborhood.crodgers.example.activities.PROXIMITY_ALERT";
Context context = getApplication().getApplicationContext();

int requestCode = 12345; //Spaceballs, anyone? anyone?
for (String domain : domainNames)
{
    String[] itemNames = itemGetter();
    for (String item : itemNames)
    {
        HashMap<String, String> attributes = getAttributesForItem(domain, item);                    

        Intent intent = new Intent(NEAR_YOU_INTENT);
        intent.putExtra(ADDRESS, attributes.get(ADDRESS));
        intent.setAction(""+requestCode);
        PendingIntent proximity = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        manager.addProximityAlert(Double.parseDouble(attributes.get(LATITUDE)),
                                  Double.parseDouble(attributes.get(LONGITUDE)), 
                                  6000f, -1, proximity);

        requestCode++;
    }
}

元々、(受信者からの通知を使用して)追加された最初の近接アラートの通知を受け取っていました。追加後

intent.setAction(""+requestCode);

私も試しました:

intent.setData(""+ requestCode)

(私はこれが他のいくつかの場所で推奨されているのを見ました)私は通知をまとめて受け取るのをやめました。

4

1 に答える 1

3

問題

問題は、setActionを使用することです

Intent intent = new Intent(NEAR_YOU_INTENT);
intent.putExtra(ADDRESS, attributes.get(ADDRESS));
intent.setAction(""+requestCode); //HERE IS THE PROBLEM

その最後の行で最終的に行うことは、アクションをNEAR_YOUR_INTENTから任意のリクエストコードに変更することです。IE、あなたは同等のことをしています

    Intent intent = new Intent();
    intent.setAction(NEAR_YOUR_INTENT);
    intent.setAction(""+requestCode); // THIS OVERWRITES OLD ACTION

追加のアプローチ

あなたが本当にやりたいのは、リクエストコードをインテントに追加して、レシーバーで取得できるようにすることだと思います。使ってみてください

    Intent intent = new Intent(NEAR_YOU_INTENT);
    intent.putExtra(ADDRESS, attributes.get(ADDRESS));
    intent.putExtra("RequestCode", requestCode);

データアプローチ

または、データをリクエストコードに設定することもできます。IE、あなたは使うことができます

    Intent intent = new Intent(NEAR_YOU_INTENT);
    intent.putExtra(ADDRESS, attributes.get(ADDRESS));
    intent.setData("code://" + requestCode);

次に、「code://」スキーマを受け入れることができるように、レシーバーを変更する必要があります。これをする:

final String NEAR_YOU_INTENT = "neighborhood.crodgers.example.activities.PROXIMITY_ALERT";
IntentFilter filter = new IntentFilter(NEAR_YOU_INTENT);
filter.addDataScheme("code");
registerReceiver(new LocationReceiver(), filter);

次に、意図を取得したときに、何らかの方法を使用してデータフィールドからIDを解析することができます。IMO、エクストラアプローチは簡単です。

于 2011-12-15T18:12:04.133 に答える