ベストでもない位置プロバイダも含めて現在位置特定を行う

id:yellow_73:20110815#p1 および id:yellow_73:20110819#p2 のつづき。
ここまで言ってませんでしたが、今回の位置特定は、現在位置をワンショットで特定するもので、精度はあまり求めないものです。継続して精度良く現在位置を取得するものとは異なります。
ある条件を満たす、現在使用可能な位置プロバイダ名の一覧を取得するには、次のようにします。

        LocationManager mLocationManager; // 生成しておいてね。
        ...
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(false);
        criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);
        criteria.setSpeedRequired(false);
        List locationProviderNameList = this.mLocationManager.getProviders(
                criteria, true);

で、これを片っ端からリクエストするようにしてやる。

           for (String providerName : locationProviderNameList) {
                if (providerName != null) {
                    this.mLocationManager.requestLocationUpdates(
                            providerName, 0, 0, this);
                }
            }

で、どれでも見つかったら、リスナを引き抜く。

        this.mLocationManager.removeUpdates(this)

メソッド呼び出し一回で全部の位置プロバイダから受信しなくなります。