위치 업데이트를 받고있는 서비스가 있습니다. 서비스가 위치를 성공적으로 반환합니다. 그러나 그 후에는 듣고있는 활동에 위치를 방송하려고합니다. 내 활동에 수신기를 등록했지만 어떤 이유로 onReceive
메서드가 호출되지 않습니다. 내 서비스 내의 내 onLocationChanged
메소드 내부의 코드는 다음과 같습니다. 내에서 onCreate 방법 내 활동 내부 BroadcastReceiver onReceive 메서드가 호출되지 않았습니까?
@Override
public void onLocationChanged(Location location) {
Intent intent = new Intent();
intent.setAction("LocationBroadcast");
double lat = location.getLatitude();
double lng = location.getLongitude();
intent.putExtra("lat", lat);
intent.putExtra("lng", lng);
//I am initializing the broadcaster object in onCreate method of my service but I am putting it here for simplicity
broadcaster = LocalBroadcastManager.getInstance(this);
//This Toast successfully shows my coordinates so I know the problem is not with this method
Toast.makeText(GoogleFusedLocationApiService.this, ""+lat+", "+lng+"", Toast.LENGTH_SHORT).show();
broadcaster.sendBroadcast(intent);
}
, 정말 같은
LocationBroadcast
에 등록하고있다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
...
IntentFilter intentFilter = new IntentFilter("LocationBroadcast");
super.registerReceiver(mMessageReceiver, intentFilter);
startService(new Intent(MyApp.getAppContext(), GoogleFusedLocationApiService.class));
}
나는 this.registerReceiver(mMessageReceiver, intentFilter);
및 LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, intentFilter);
을 시도했지만 어느 쪽도했다.
여기에, 또한
public BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
double lat = intent.getDoubleExtra("lat", 0);
double lng = intent.getDoubleExtra("lng", 0);
// This Toast never shows and neither can I debug this method at all
// so for now the only conclusion is the broadcast is not being received
Toast.makeText(MyApp.getAppContext(), "Cordinates are "+lat+", "+lng+"", Toast.LENGTH_SHORT).show();
}
};
, 나는 몇 가지 조사 후 문제가 생각할 수있는 몇 가지 세부 사항 정의 내 mMessageReceiver
입니다. 나는 manifest
에 receiver
을 선언하지 않았습니다. 왜냐하면 브로드 캐스트를 받았을 때 응용 프로그램을 시작하려고 할 때만 수행한다는 것을 알았 기 때문에 이미 실행 중일 때 내 응용 프로그램이 반응하기를 원합니다. 서비스가 브로드 캐스트를 보낼 때마다 실행되지 않습니다.
그리고 활동이 이미 충돌하지 않는 FragmentActivity
앱으로 확장되고 onLocationChanged가 이렇게 등록 된 브로드 캐스트 리시버 후에 시작되고있는 서비스 내부에 위치한 하나 때문에 BroadcastReceiver
로 활동을 확장하지 않은 onLocationChanged BroadcastReceiver가 등록되기 전에 호출되지 않습니다.
수신기 위치는 정확히 어디에 있습니까? onlocationChanged 또는 다른 활동과 동일한 활동에서? –
'onLocationChanged'는 별도의 서비스에 있습니다. 수신자는 예를 들어 방송 당시 볼 수있는 활동 안에 있습니다. –
왜 super.registerReceiver를 부르시겠습니까? – JoxTraex