2013-10-24 3 views
1

Android 기기에서 사용자의 위치를 ​​파악하려고합니다. 프로그램은 GPS 사용성을 확인합니다. GPSProvider가 비활성화되어 있으면 사용자에게 경고합니다. 사용자가 GPS를 사용하지 않으면 networkProvider를 확인하십시오. 검사 네트워크 공급자에 대한네트워크 연결이 닫혀 있지만 위치 제공 업체가 NetworkProvider 인 경우

코드,

와이파이 및 모바일 연결이 해제 비록
public boolean askNetworkProvider(){ 

    if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 
     AlertDialog builder = new AlertDialog.Builder(context) 
       .setMessage("Enable Network Connection") 
       .setTitle("Warning!") 
       .setCancelable(true) 
       .setPositiveButton("OK", new OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         return; 
        } 
       }).show(); 
    } 

    if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000, 0, networkListener); 
     mlocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     Log.i(LocationService.class.getName(),"Network Enable!!"); 
     return true; 

    } 
    return false; 
} 

, 그것은 networkProvider 말한다 활성화하고 문 경우 두 번째 입력입니다. 그러나 거짓이어야합니다. 어떻게 해결할 수 있습니까?

답변

6

아마도 '설정 - 위치 서비스'의 '무선 네트워크 사용'을 사용 중지하는 대신 드롭 다운 옵션에서 기본 메뉴의 Wi-Fi 연결을 사용 중지했기 때문일 수 있습니다.

Wi-Fi! = 무선 네트워크 사용을 명심하십시오.당신이

locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 

를 사용하는 경우

는 "사용자 무선 네트워크"옵션을 cheking된다.

동일한 문제가 있었지만 많은 질문이 모두 StackOverflow에 게시되었으며 단 하나의 대답 만이 정보를 가지고있었습니다. 오후 내내 나를 데려 갔어. 희망을! :)

+0

사실입니다. 감사합니다. –

0

GPS에 대해 googlePlay SDK를 사용하는 것이 좋습니다.

어리석은 버그가없는 매력처럼 작동합니다. 코드를 googlePlay SDK로 변경했는데 내 사용자에게 적합합니다. (불평 없음)

+0

어떻게 googlePlay SDK로 코드를 변경 했습니까? 죄송합니다. Android의 새로운 기능입니다. – lifetime

0

나는 "가능하다"는 것은 당신이 생각하는 것을 의미하지 않는다고 생각합니다. 확인하고있는 것은 사용자가 휴대 전화가 위치 제공 업체를 사용할 수 있는지, 즉 Wi-Fi를 통해 위치 정보를 가져 오는 위치 서비스를 사용할 수 있는지를 확인하는 것입니다. 그렇다고해서 NetworkProvider이 결과를 반환하는 데 성공했거나 성공할 것이라는 의미는 아니며 사용자가 액세스하도록 허용 한 것입니다.

LocationManager을 사용하면 "업데이트가 실패했습니다"라는 응답이 없습니다. 매개 변수 내에서 사용자의 위치가 변경된 경우에만 알림을받습니다. 절대 그렇지 않다면 할 수있는 일이별로 없습니다.

재생 서비스를 사용할 수 없거나 오류가 반환되면 GooglePlayServices를 사용하여 위치를 얻은 다음 백업으로 표준 위치 관리자로 전환하는 것이 더 쉬웠습니다. 당신은 이것을하는 방법을 볼 수있다 here. post on the android developers blog은 두 가지 접근 방법을 결합하여 사용 가능한 경우 Google Play를 사용하고 사용할 수없는 경우 일반 위치 관리자로 전환하는 방법을 보여줍니다.

1

새로운 Android 4.3 (API 수준 18 이상) 및이를 사용하는 기기에는 고급 WiFi 설정 : "항상 검색 가능". 이 확인란을 선택하면 WiFi가 꺼져 있어도 장치가 WLAN & 위치를 검색 할 수 있으므로 두 번째 if 문을 입력 할 가능성이 큽니다. 이 고정적으로 프로그래밍 방식으로 얻으려면 빌드 버전 검사 (및 아마도 다른 설정 검사) if 문을 추가 할 수 있습니다. (그리고 그 경우에 어떻게 작동 시킬지를 정의해야합니다.) 쉬운 수동 해결 방법은 물론 설정을 비활성화하는 것입니다. Nexus 7 : 설정 -> WiFi-> 고급 -> '항상 검색 가능'을 선택 취소합니다.

0

Google은 융합 위치 구현으로 위치 논리를 업데이트했습니다. 이 샘플이 재미있을 것 같아. 위치 업데이트를하는 동안 어떤 공급자가 활성화되어 있는지 정의 할 필요가 없습니다. http://www.kpbird.com/2013/06/fused-location-provider-example.html?m=1
편집 : 이것은 귀하의 질문에 대한 대답이 아니지만 제 의견으로는 융합 된 위치 구현이 위치 청취를위한 최선의 방법입니다. 융합 된 위치에서 청취 구조를 구현하시기 바랍니다.

관련 문제