Android locationmanager не вызывает методы

#android #gps

#Android #gps

Вопрос:

У меня возникли проблемы с locationmanager в Android. У меня есть следующий класс:

 package com.flyer;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ContentProvider implements LocationListener {
    private Activity connectedActivity;

    public ContentProvider(Activity connectedActivity) {
        this.connectedActivity = connectedActivity;
        LocationManager locationManager = (LocationManager)connectedActivity.getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0, this);
    }

    public void onLocationChanged(Location loc)
    {
        MyActivity.rowsData.add(new RowData(0, "Test", "Val: "   Math.random(), 0));
    }

    public void onProviderDisabled(String provider)
    {
        Intent in = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        connectedActivity.startActivity(in);
    }

    public void onProviderEnabled(String provider)
    {
        Toast.makeText(connectedActivity.getApplicationContext(),
                "Gps Enabled",
                Toast.LENGTH_SHORT).show();

    }

    public void onStatusChanged(String provider, int status, Bundle extras)
    {
        MyActivity.rowsData.add(new RowData(0, "Test", "Val: " Math.random(), 0));
    }


}
 

Я вызываю конструктор ContentProvider (this) в моем mainactivity. Однако, когда я подключаюсь по telnet к своему эмулятору и выполняю геофиксацию, ничего не происходит.

Я попытался установить содержимое с точкой останова, оно не будет достигнуто.

Также я занимаюсь разработкой для Android 2.1.

Любая помощь будет оценена.

Получение предупреждения:

 10-30 21:10:38.787: WARN/GpsLocationProvider(52): Could not open GPS configuration file /etc/gps.conf
 

Ответ №1:

Можете ли вы опубликовать свой XML-манифест? Добавили ли вы необходимые разрешения?

 <android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<android:name="android.permission.ACCESS_FINE_LOCATION" />
 

Получали ли вы какие-либо исключения в вашей трассировке logcat? Я рекомендую попробовать это на реальном устройстве, чтобы исключить проблемы с конфигурацией вашего эмулятора.

К вашему сведению, вот как я включаю трассировку отладки для своего приложения, используя adb logcat :

 adb shell stop
adb shell setprop log.tag.MYTAG DEBUG
adb shell start
adb logcat MYTAG:D *:W > c:temptrace.txt
 

Чтобы избежать необходимости возиться с трассировкой уровня ОТЛАДКИ, я предлагаю вам придерживаться ведения журнала в журнале.ИНФОРМАЦИОННЫЙ уровень. В этом случае вам нужна только последняя команда.

Комментарии:

1. Я добавил разрешения, да. Я действительно получаю предупреждение, добавляю в OP. Фуртер, я не могу найти никаких связанных с этим ошибок.

2. Выполнение поиска в Google для этой ошибки показывает, что вам нужно настроить местоположение в вашем эмуляторе, вот как: groups.google.com/group/android-framework/msg/f94e0bbb227c03c6 Протестируйте с помощью реального телефона, и у вас не возникнет проблем…

3. Я тестировал на двух телефонах и добрался до onProviderDisabled и onProviderEnabled, но никогда до onLocationChanged. Каким-то образом он все еще не работает должным образом, есть идеи, почему?

4. Вы добавили журналы в onLocationChanged или предполагаете, что он не вызывается, потому что строка rowsData.add не работает? Вероятно, вам следует повсюду добавлять журналы и включать вывод logcat в свой вопрос.

5. Вам также может оказаться полезным добавить @Override перед всеми вашими переопределенными методами, таким образом, Eclipse предупредит вас, если метод не подходит для интерфейса, который вы пытаетесь реализовать (в этом случае onLocationChanged выглядит нормально).