Tecnologia do Blogger.
RSS

[androidbrasil-dev] Re: Perímetro - GPS

No pacote android.location tem um service chamado LocationManager
( http://developer.android.com/reference/android/location/LocationManager.html
) que faz o que você precisa (porém a única figura geométrica
suportada é um círculo).

Ele fornece basicamente 2 coisas: um mecanismo para obter a a
localização geográfica do aparelho e um recurso para sua aplicação ser
notificada (via intent) quando o dispositivo entra em uma localização
geográfica especificada (um ProximityAlert).

O método para configurar esse alerta de proximidade é o
addProximityAlert() . Basicamente você diz ao LocationManager que você
deseja que um Intent seja disparado quando o dispositivo entra ou sai
de um determinado circulo de
um certo raio que que você define tendo como centro um par latitude/
longitude.

Esse intent pode iniciar um BroadcastReceiver, um Serviço ou uma
atividade. Ele também um parâmetro opcional onde você pode passar o
tempo limite antes de iniciar o intent. Segue um exemplo de uso
abaixo:


// Arquivo ProximityActivity.java
package com.computationalcore.android.location.proximity;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;


public class ProximityActivity extends Activity {
private final String PROX_ALERT =
"com.computationalcore.android.intent.action.PROXIMITY_ALERT";
private ProximityReceiver proxReceiver = null;
private LocationManager locMgr = null;
PendingIntent pIntent1 = null;
PendingIntent pIntent2 = null;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
locMgr = (LocationManager)
this.getSystemService(LOCATION_SERVICE);


// Coordenadas da UFRJ
double lat = -14.2394
double lon = -53.1865;
float radius = 5.0f * 1000.0f; // 5km ( o argumento espera o
valor do raio em metros)
String geo = "geo:"+lat+","+lon;
Intent intent = new Intent(PROX_ALERT, Uri.parse(geo));
intent.putExtra("messagem", "UFRJ, RJ");
pIntent1 = PendingIntent.getBroadcast(getApplicationContext(),
0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
locMgr.addProximityAlert(lat, lon, radius, -1L, pIntent1);

//Vocẽ pode definir mais locais se quiser, então se vocẽ
quiser montar uma figura geométrica
// mais complexa tente montar ela com pequenos círculos

//Outro local
double lat = -17.2394
double lon = -52.1865;
geo = "geo:"+lat+","+lon;
intent = new Intent(PROX_ALERT, Uri.parse(geo));
intent.putExtra("messagem", "Outro local");
pIntent2 = PendingIntent.getBroadcast(getApplicationContext(),
0,
intent, PendingIntent.FLAG_CANCEL_CURRENT);
locMgr.addProximityAlert(lat, lon, radius, -1L, pIntent2);

proxReceiver = new ProximityReceiver();
IntentFilter iFilter = new IntentFilter(PROX_ALERT);
iFilter.addDataScheme("geo");
registerReceiver(proxReceiver, iFilter);
}
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(proxReceiver);
locMgr.removeProximityAlert(pIntent1);
locMgr.removeProximityAlert(pIntent2);
}
}

// Arquivo ProximityReceiver.java
package com.computationalcore.android.location.proximity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;

public class ProximityReceiver extends BroadcastReceiver {
private static final String TAG = "ProximityReceiver";

@Override
public void onReceive(Context arg0, Intent intent) {
Log.v(TAG, "Intent Captada");
if(intent.getData() != null)
Log.v(TAG, intent.getData().toString());
Bundle extras = intent.getExtras();
if(extras != null) {
Log.v(TAG, "Messagem: " + extras.getString("message"));
Log.v(TAG, "Presente no local: " +
extras.getBoolean(LocationManager.KEY_PROXIMITY_ENTERING));
}
}
}

No Androidmanifest.xml você coloca dentro de <application>:

<receiver android:name=".ProximityReceiver">
<intent-filter>
<action
android:name="com.computationalcore.android.intent.PROXIMITY_ALERT" />
<data android:scheme="geo" />
</intent-filter>
</receiver>

Espero ter ajudado.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário