1

後でテスト用のエリアに近接を設定しようとしています。これをonCreateメインアクティビティのメソッドに追加しただけです。

public void onCreate(Bundle bndBundle) {

    IntentFilter filter = new IntentFilter(WidgetService.ACTION_STOP_PROXIMITY); 
    registerReceiver(new ProximityIntentReceiver(), filter);

    LocationManager locManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);
    Intent ittIntent = new Intent(this, ProximityIntentReceiver.class);
    ittIntent.putExtra(WidgetService.KEY_STOP_IDENTIFIER, 1000);
    PendingIntent pitIntent = PendingIntent.getBroadcast(this, 0, ittIntent, 0);
    locManager.addProximityAlert(60.15769, 24.94150, 150, -1, pitIntent);

    super.onCreate(bndBundle);
    getActionBar().setDisplayHomeAsUpEnabled(false);

}

..そして、これが私が使用している単純なレシーバークラスです

public class ProximityIntentReceiver extends BroadcastReceiver {

    private static final int NOTIFICATION_ID = 1000;

    @Override
    public void onReceive(Context context, Intent intent) {

        String key = LocationManager.KEY_PROXIMITY_ENTERING;
        Boolean entering = intent.getBooleanExtra(key, false);

        if (entering) {
            Log.d(getClass().getSimpleName(), "entering");
        }
        else {
            Log.d(getClass().getSimpleName(), "exiting");
        }

    }

}

エミュレーターでこれをテストしていますが、DDMS コンソールを使用して電話の座標を手動で設定しても、まだログ メッセージが表示されません。

私のマニフェスト ファイルには特別なコードはありません。正しいアクセス許可を追加し、単純なアクティビティのコードを用意しました。サービスなどはありません。

StacKOverflow に関する一連の投稿を読みましたが、問題を解決できませんでした。スニペットに何か不足していますか?

4

2 に答える 2

1

registerReceiver()アクション文字列が であるブロードキャストに応答させるために、 を介してこのレシーバを動的に登録しますWidgetService.ACTION_STOP_PROXIMITY

Intentただし、送信している実際のブロードキャストは、受信者クラスを識別する明示的な を使用しようとしています。IntentFilterこれは、で使用していると一致しませんregisterReceiver()

また:

  • レシーバーをマニフェストに登録し、を削除しregisterReceiver()ます。この場合、明示的Intentに機能します。または

  • new Intent(WidgetService.ACTION_STOP_PROXIMITY)の代わりにnew Intent(this, ProximityIntentReceiver.class)使用しIntentて、IntentFilter

明示的なIntentオブジェクトを使用して、 経由で登録された受信者にブロードキャストを送信することはできませんregisterReceiver()。明示的Intentは、マニフェストに登録された受信者でのみ機能します。

于 2013-03-23T13:35:19.187 に答える
0

正しい座標を入力してください。DDMS では、最初に経度、次に緯度が逆になります。

于 2013-05-09T19:21:06.530 に答える