안드로이드에서 addProximityAlert() 질문드립니다.

clapmin의 이미지

제가 위도와 경도를 이용하여 addProximityAlert()를 호출했습니다.

expiration은 -1로 주었구요.

근데 이게 위도 경도를 입력하고 등록 버튼을 누르게 되면 누르는 순간에는 해당 위치에 근접해있는지 멀리 떨어져 있는지의 여부를 토스트 메시로 띄워줍니다.

근데 제가 알기로는 expiration값이 -1이면 알림을 해제하지 않았기 때문에 토스트 메시지가 계속 떠야할거 같은데 그게 안되네요...

한번만 보여주고 다시 안뜹니다.... 혹시 제가 이해하고 있는게 틀린건가요?? ㅠㅠ

package com.example.sumin.msp_assignment01;

import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.view.View;
import android.widget.*;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
LocationManager locManager; // 위치 정보 프로바이더
LocationListener locationListener; // 위치 정보가 업데이트시 동작
PendingIntent proximityIntent;
AlertReceiver receiver;
String name;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Button bt_setAlarm = (Button) findViewById(R.id.bt_alarm);
Button bt_regist = (Button) findViewById(R.id.bt_regist);
final String currentName;

final EditText input_latitude = (EditText) findViewById(R.id.input_latitude);
final EditText input_logitude = (EditText) findViewById(R.id.input_logitude);
final EditText input_name = (EditText) findViewById(R.id.input_name);

final LinearLayout setting = (LinearLayout) findViewById(R.id.settingMenu);
final TextView location_latitude = (TextView) findViewById(R.id.val_latitude);
final TextView location_logitude = (TextView) findViewById(R.id.val_logitude);

locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
location_latitude.setText(" " + location.getLatitude());
location_logitude.setText(" " + location.getLongitude());
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}
};

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

// GPS 프로바이더를 통해 위치를 받도록 설정
// 2초 간격으로 위치 업데이트
// 위치 정보를 업데이트할 최소 거리 0m

bt_setAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setting.setVisibility(View.VISIBLE);
}
});

bt_regist.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(MainActivity.this, input_name.getText().toString() + " 정보가 등록되었습니다..", Toast.LENGTH_SHORT).show();
setting.setVisibility(View.INVISIBLE);
receiver = new AlertReceiver();
IntentFilter filter = new IntentFilter("kr");
registerReceiver(receiver, filter);

Intent intent = new Intent("kr");
proximityIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
try {
System.out.println("Alert");
name = input_name.getText().toString();
locManager.addProximityAlert(Double.parseDouble(input_latitude.getText().toString()), Double.parseDouble(input_logitude.getText().toString()), 50, -1, proximityIntent);
} catch (SecurityException e) {
e.printStackTrace();
}
}
});

}

class AlertReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int count = 0;
System.out.println("In onRecevice"+ count++);
boolean isEntering = intent.getBooleanExtra(LocationManager.KEY_PROXIMITY_ENTERING, false);
if(isEntering)
Toast.makeText(context, name + " 지점에 접근중입니다..", Toast.LENGTH_SHORT).show();
else
Toast.makeText(context, name + " 지점에서 벗어납니다..", Toast.LENGTH_SHORT).show();
}
}
public void onStop(){
super.onStop();
locManager.removeUpdates(locationListener);
unregisterReceiver(receiver);
}
}
//////////////////////////////////////////////////////

<?xml version="1.0" encoding="utf-8"?>

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="현재위치"
android:id="@+id/currentLocation" />

android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="위도:" />

android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/val_latitude" />

android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="경도:" />

android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/val_logitude" />

android:orientation="horizontal"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="wrap_content">

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="경보설정"
android:id="@+id/bt_alarm" />

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="경보해제"
android:id="@+id/bt_removeAlarm" />

android:orientation="vertical"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/settingMenu">

android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="위도" />

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/input_latitude"
android:layout_weight="1" />

android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="경도"
android:id="@+id/textView3" />

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/input_logitude"
android:layout_weight="1" />

android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이름"
android:id="@+id/textView5" />

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/input_name"
android:layout_weight="1" />

android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="등록"
android:id="@+id/bt_regist" />

File attachments: 
첨부파일 크기
Image icon KakaoTalk_20160401_221913058.jpg37.57 KB
clapmin의 이미지

내용이 많이 보기 힘드네요 ㅠㅠ
그래도 잘 부탁드립니다.

보기 힘드시면 소스를 첨부해서 올리도록 할게요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.