public class ProximityTest extends Activity { /* 누군가는 방송하고 누군가는 시청합니다. */
private static final String TAG = "ProximityTest"; private final String POI_REACHED = // 공중파 방송의 채널 같은 역할. 임의로 정함. "com.example.proximitytest.POI_REACHED"; // private PendingIntent proximityIntent;
private final double sampleLatitude = 127; // 목표 위치 private final double sampleLongitude = 37.5;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Log.d(TAG, "Registering ProximityAlert");
//방송 시작, 방송이름은 POI_REACHED, 누가 이방송을 필요하는지는 관심없음. 그냥 보내는... Intent intent = new Intent(POI_REACHED); proximityIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
//방송 조건, 목표위치에 50미터 안으로 이동하면 10초간 경보 라는 방송을 보냄. 방송이름은POI_REACHED //경보란게 먼지 모르겠음. 에뮬레이터에서 어떻게 확인 가능한지 모름. locationManager.addProximityAlert(sampleLatitude, sampleLongitude, 50, 1000000, proximityIntent);
/*================================================================*/ //시청자. POI_REACHED 이란 채널명으로 방송된 내용을 보려고 함. IntentFilter intentFilter = new IntentFilter(POI_REACHED); registerReceiver(new ProximityAlertReceiver(), intentFilter); /*================================================================*/ } else { Log.d(TAG, "GPS_PROVIDER not available"); }
}
}
/* 방송을 잡아주는 넘 */ class ProximityAlertReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //방송을 잘 잡으면 밑에 로그 한번 찍어줌. // 지피에스 위치가 변해서 127, 37.5 로 되면 DDMS 에 아래 로그가 찍힘으로 확인 가능 Log.d("MyTag", "Proximity Alert was fired"); } }
질문 이곳에 어떤분이 질문한 예제가 있는데 약간 수정해서 작동하게 했습니다.
package com.android.gas;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
public class ProximityTest extends Activity {
/* 누군가는 방송하고 누군가는 시청합니다. */
private static final String TAG = "ProximityTest";
private final String POI_REACHED = // 공중파 방송의 채널 같은 역할. 임의로 정함.
"com.example.proximitytest.POI_REACHED"; //
private PendingIntent proximityIntent;
private final double sampleLatitude = 127; // 목표 위치
private final double sampleLongitude = 37.5;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupProximityAlert(); //방송국
}
private void setupProximityAlert() {
LocationManager locationManager = (LocationManager)
getSystemService(LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Log.d(TAG, "Registering ProximityAlert");
//방송 시작, 방송이름은 POI_REACHED, 누가 이방송을 필요하는지는 관심없음. 그냥 보내는...
Intent intent = new Intent(POI_REACHED);
proximityIntent =
PendingIntent.getBroadcast(getApplicationContext(), 0, intent,
PendingIntent.FLAG_ONE_SHOT);
//방송 조건, 목표위치에 50미터 안으로 이동하면 10초간 경보 라는 방송을 보냄. 방송이름은POI_REACHED
//경보란게 먼지 모르겠음. 에뮬레이터에서 어떻게 확인 가능한지 모름.
locationManager.addProximityAlert(sampleLatitude,
sampleLongitude, 50, 1000000,
proximityIntent);
/*================================================================*/
//시청자. POI_REACHED 이란 채널명으로 방송된 내용을 보려고 함.
IntentFilter intentFilter = new IntentFilter(POI_REACHED);
registerReceiver(new ProximityAlertReceiver(),
intentFilter);
/*================================================================*/
} else {
Log.d(TAG, "GPS_PROVIDER not available");
}
}
}
/* 방송을 잡아주는 넘 */
class ProximityAlertReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
//방송을 잘 잡으면 밑에 로그 한번 찍어줌.
// 지피에스 위치가 변해서 127, 37.5 로 되면 DDMS 에 아래 로그가 찍힘으로 확인 가능
Log.d("MyTag", "Proximity Alert was fired");
}
}