문제

현재 GPS 위치를 가져 와서이 값을 원격 PHP 페이지로 전달하여 정보를 가져 와서 위젯에 표시하는 위젯에서 작업 중입니다. 이것이 제가하려는 일입니다.

AppWidget의 위치 청취자를 구현하면서 문제에 직면하고 있습니다. 현재 위치로 업데이트되지 않으며 초기 위젯, 즉 "로드 위젯"을 표시하고 있습니다 (여기서는이 텍스트를 넣습니다).

AppWidgetProvider의 위치 청취자를 구현할 수 있습니까?
또는
앱 위젯에서 GPS 위치를 얻을 수있는 가능한 솔루션을 제안 할 수 있습니까?

필요한 모든 권한을 매니페스트 파일에 배치했습니다.
내 코드 스 니펫은 다음과 같습니다.

public class test extends AppWidgetProvider {
static LocationManager locMan;
static Location curLocation;
static Boolean locationChanged;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
    // To prevent any ANR timeouts, we perform the update in a service
    context.startService(new Intent(context, UpdateService.class));
}

public static class UpdateService extends Service {
    // GPS Listener Class
    LocationListener gpsListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            // Log.w("GPS", "Started");
            if (curLocation == null) {
                curLocation = location;
                locationChanged = true;
            }

            if (curLocation.getLatitude() == location.getLatitude() && curLocation.getLongitude() == location.getLongitude())
                locationChanged = false;
            else
                locationChanged = true;

            curLocation = location;

            if (locationChanged) 
                locMan.removeUpdates(gpsListener);

        }

        public void onProviderDisabled(String provider) {

        }

        public void onProviderEnabled(String provider) {
            // Log.w("GPS", "Location changed", null);
        }

        public void onStatusChanged(String provider, int status,
                Bundle extras) {
            if (status == 0)// UnAvailable
            {

            } else if (status == 1)// Trying to Connect
            {

            } else if (status == 2) {// Available

            }
        }

    };

    // In service start method, I am registering for GPS Updates
    @Override
    public void onStart(Intent intent, int startId) {

        locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if (locMan.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,20000, 1, gpsListener);
        } else {
            this.startActivity(new Intent("android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS"));
        }

        if (curLocation != null) {
            double lat = curLocation.getLatitude();
            double lng = curLocation.getLongitude();
            Toast.makeText(getBaseContext(),"Lat : " + String.valueOf(lat) + "\n Long : "+ String.valueOf(lng), Toast.LENGTH_LONG).show();

        }
        // Build the widget update for today
        RemoteViews updateViews = buildUpdate(this);

        // Push update for this widget to the home screen
        ComponentName thisWidget = new ComponentName(this,InKakinadaWidget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(this);
        manager.updateAppWidget(thisWidget, updateViews);

    }

    public RemoteViews buildUpdate(Context context) {
        // Here I am updating the remoteview
        return updateViews;
    }

    @Override
    public IBinder onBind(Intent intent) {
        // We don't need to bind to this service
        return null;
    }

}
}

미리 감사드립니다 ...

그와 관련하여 Raghavendra K.

도움이 되었습니까?

해결책

에뮬레이터 나 장치 에서이 문제가 있습니까? 에뮬레이터에있는 경우 DDMS를 사용하여 GPS 위치를 설정하십시오. 그러나 가장 쉬운 일은 장치에서 코드를 실행하여 GPS 업데이트를 그런 식으로 업데이트하는지 확인하는 것입니다.

다른 팁

내가 보는 문제는 requestLocationUpdates ()를 호출 한 직후에 onstart ()에서 곡선을 확인하려고한다는 것입니다. LocationManager.requestLocationUpdates ()는 비동기식이므로 onstart ()가 반환 될 때까지 LocationListener가 다시 호출되지 않습니다. LocationListener가 위치를 수신 한 후 UI를 업데이트하도록하고 OnStart에서 시도하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top