2017-12-26 48 views
0

전체 화면을 차지하고 뷰 페이지에서 관리하는 두 조각으로 앱을 만들고 있는데 둘 다 위치 데이터를 사용하며 LocationManager를 구현하고 LocationListener를 사용하여 위치 데이터를 확인하여 확인합니다 사용자가 이동하여 새 데이터가 필요한 경우 두 조각 모두 사용자 위치를 사용하여 초기 데이터를 표시하며 새 데이터를 표시하기 위해 사용자가 위치를 변경했는지 여부를 알아야합니다. 나는 위치 데이터 요청 업데이트를 얻으려면 다음 코드를 사용액티비티에서 조각을 업데이트하는 방법

private void getLocationData() { 
    mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    mLocationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      Log.d("LOLWeather", "onLocationChange() callback received"); 
      mLatitude = location.getLatitude(); 
      mLongitude = location.getLongitude();     
     } 

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

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
     } 
     @Override 
     public void onProviderDisabled(String provider) { 
      Log.d("LOLWeather", "onProviderDisabled callback received"); 
     } 
    }; 

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_COARSE_LOCATION} ,REQUEST_CODE); 
     return; 
    } 
    mLocationManager.requestLocationUpdates(LOCATION_PROVIDER, MIN_TIME, MIN_DISTANCE, mLocationListener); 
    mLatitude = mLocationManager.getLastKnownLocation(LOCATION_PROVIDER).getLatitude(); 
    mLongitude = mLocationManager.getLastKnownLocation(LOCATION_PROVIDER).getLongitude(); 
} 

내 첫 번째 질문입니다 나는 내가 할 수있는 각 조각 내 onPause 각 조각 안쪽에이 코드를 삽입 할 수 있습니다 그림! 을 (mLocationManager 경우 = null) mLocationManager.removeUpdates (mLocationListener);

그러나 사용자가 한 조각 /보기에서 다른보기/다른 곳으로 바꿀 때마다 위치 데이터를 요청하고 매번 locationListener를 추가 및 제거하는 것은 잘못된 것처럼 보입니다. 그들은 둘 다 내 위치 데이터를 사용하기 때문에 최선의 활동 내에서 getLocationData() 메서드를 배치 생각, 이것이 맞습니까 ??? 만약 내가 어떻게 처리해야합니까, 각 조각에 getLocationData() 메서드를 넣어 ???

내가 잘못 붙지 않는 한 Im가 잘못 붙어 있지 않은데, onLocationChanged() 메소드가 locationListener 내에서 호출 될 때 주 활동 내에서 getLocationData() 메소드가 생겼다. 위치가 변경되어서 업데이트됩니다. ??? 원래는 번들을 통해 프래그먼트에 데이터를 전달하지만 프래그먼트가 생성되면 프래그먼트 내에 새 데이터가있는 프래그먼트 내 메소드를 만들 수 있지만 어떻게 업데이트해야하는지 알려주고 제공해야합니다. 그것 새로운 위치 데이터 ???

감사합니다.

+0

맞춤식 방송 녹화 위치 업데이 트에 관한 조각을 알리는 eiver .. –

+0

'퓨즈 위치'를 사용하면 백그라운드에서 실행할 필요가없는 최상의 서비스를 제공하여 새롭고 쉬운 '위치 정보'를 업데이트 할 수 있습니다. –

답변

0

는 난이 올바른지 활성 자체 내에 getLocationData() 메소드를 배치하기 위해 최선을 나타냈다 ???

나는 그것을하는 것이 좋은 방법이라고 생각합니다.

조각을 변경하여 위치가 변경되도록 어떻게 표시합니까?

위치 업데이트를 수신하면 브로드 캐스트를 보내고이 이벤트에 수신기를 등록하여 조각을 업데이트 할 수 있습니다.

e.g :

당신이 당신의 활동의 방법에서 업데이트 이벤트 잡을

: 당신의 조각에, 다음

sendBroadcast(new Intent("action_location_updated")); 

과 :

BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if ("action_location_updated".equals(intent.getAction())) { 
       // update fragment here 
      } 
     } 
    }; 
IntentFilter filter = new IntentFilter("action_location_updated"); 
registerReceiver(mReceiver, filter); 

참고 :이 같은 작업의 문자열을 사용하는 것이 좋습니다 정적 최종 변수 :

public static final ACTION_UPDATE_FRAGMENT = "action_location_updated"; 
+0

'onReceive'에서 locaion을 얻는 방법은 무엇입니까? –

+0

위치 데이터를 포함 할 수있는 브로드 캐스트를 보낼 때 인 텐트에 인 텐트를 추가 할 수 있습니다. –

+0

고마워,이게 완벽 해 보인다 !!! 그리고 위의 코멘트에 대한 귀하의 답변은! – Jack

1

내 생각에 Activity에 getLocationData() 함수를 넣고 거기에서 새 위치로 브로드 캐스트를 보냅니다.

이것은 broadcat에서 설명과 연결됩니다. 둘은 위치 데이터를 사용하기 때문에

https://developer.android.com/guide/components/broadcasts.html

+0

감사합니다 이것은 올바른 대답 이었지만 다른 하나는 설명력이 뛰어 났고 저를 도와주었습니다, 감사합니다! – Jack