10

特定のアドレスを受け取る Android アプリケーションを開発しています。ユーザーがそのアドレスにいる場合、またはそれに近い場合にのみ、アプリをデバイスで実行したいと思います。

google maps apiだけでできますか?

4

2 に答える 2

8

住所を取得し、住所から緯度と経度を取得できます。

Geocoder coder = new Geocoder(this);
List<Address> address;

try {
    address = coder.getFromLocationName(strAddress,5);
    if (address == null) {
        return null;
    }
    Address location = address.get(0);
    location.getLatitude();
    location.getLongitude();


}

そして、それをあなたの場所と比較してください:

if (distance(mylocation.latitude, mylocation.longitude,   location.getLatitude(), location.getLongitude()) < 0.1) { // if distance < 0.1

   //   launch the activity
}else {
   finish();
}


/** calculates the distance between two locations in MILES */
private double distance(double lat1, double lng1, double lat2, double lng2) {

    double earthRadius = 3958.75; // in miles, change to 6371 for kilometers

    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);

    double sindLat = Math.sin(dLat / 2);
    double sindLng = Math.sin(dLng / 2);

    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
        * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    double dist = earthRadius * c;

    return dist;
}

編集: @FelipeMosso が言っていたように、2 つの場所の間のおおよその距離をメートル単位で計算する distanceBetween や、現在地と目的地の間の距離を示すdistanceToを使用することもできます。

于 2013-09-27T17:00:17.013 に答える
2

GMSCore Locations API には Geocoding もあり、1 つ以上の Geofence ロケーションへのデバイスの近接を検出できます。マップを使用して、住所の緯度経度を取得できます。

これにより、アプリの実行が停止することはありません。より良い解決策は、アプリを起動してから、バックグラウンドに移行できるようにすることです。ユーザーがジオフェンスを越えると、通知が表示されます。ユーザーが通知をクリックすると、Activity が表示されます。

ジオフェンスの作成と監視を参照してください

于 2013-09-27T17:27:58.910 に答える