#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 выглядит нормально).