Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java + Android + requestLocationUpdates 
:(
    Опции темы
chiffa
Дата 5.3.2013, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Всем добрый день. Стоит задача сделать плагин для PhoneGap который будет определять гео-позицию юзера. Делаю так:

HelloPlugin.java

Код


package com.chiffa.test

import org.apache.cordova.Config;
import org.apache.cordova.DroidGap;
import org.apache.cordova.GPSListener;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import org.apache.cordova.*;

import android.util.Log;
import android.webkit.WebView;

import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

import android.location.Geocoder;
import android.os.Bundle;



@SuppressWarnings("deprecation")
public class HelloPlugin extends Plugin implements LocationListener {
    
    public static MainActivity context = null;

    public static final String NATIVE_ACTION_STRING="nativeAction";
    public static final String SUCCESS_PARAMETER="success";
    

    private String bestProvider;
    
    private LocationManager lManager;
    
    private Location currentBestLocation = null;
    
    @Override
    
    

    
    public PluginResult execute(String action, JSONArray data, String callbackId) {
        
        
        
             
         //only perform the action if it is the one that should be invoked
         if (NATIVE_ACTION_STRING.equals(action)) {
             
             
             lManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
             
             Criteria criteria = new Criteria();
                bestProvider = lManager.getBestProvider(criteria, false);
                
                
                
                try {
                    
                lManager.requestLocationUpdates(bestProvider, 1000, 0, this);
                }
                  catch (Exception e) {
                    e.printStackTrace();
                  }
             
              
                
             Log.d("Plugin", "Plugin is ok");
             
             return new PluginResult(PluginResult.Status.OK, "Yay, Success!!!");
         
             
             
                     }
         
         
         
         return null;
    }



    public void onLocationChanged(Location location) {
        Log.d("---", String.valueOf(location.getLatitude()));
        
    }



    public void onProviderDisabled(String provider) {
    }



    public void onProviderEnabled(String provider) {
    }



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


    
}






MainActivity.java
Код



package com.cff.travel;

import android.os.Bundle;
import org.apache.cordova.*;
import android.location.Geocoder;
import android.content.Context;
import android.location.Criteria;



public class MainActivity extends DroidGap {

    LocationManager lManager;
    
    private static String bestProvider;

    @Override
    public void onCreate(Bundle savedInstanceState) {
     

     
     HelloPlugin.context = this;
     
    
         super.onCreate(savedInstanceState);
        // Set by <content src="index.html" /> in config.xml
        super.loadUrl(Config.getStartUrl());
        //super.loadUrl("file:///android_asset/www/index.html")
    }
    
    

    
}





на строке вызова    lManager.requestLocationUpdates(bestProvider, 1000, 0, this); бьет ошибки:

03-05 00:18:51.450: W/System.err(26662): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-05 00:18:51.455: W/System.err(26662):    at android.os.Handler.<init>(Handler.java:121)
03-05 00:18:51.455: W/System.err(26662):    at android.location.LocationManager$ListenerTransport$1.<init>(LocationManager.java:183)
03-05 00:18:51.455: W/System.err(26662):    at android.location.LocationManager$ListenerTransport.<init>(LocationManager.java:183)
03-05 00:18:51.460: W/System.err(26662):    at android.location.LocationManager._requestLocationUpdates(LocationManager.java:661)
03-05 00:18:51.460: W/System.err(26662):    at android.location.LocationManager.requestLocationUpdates(LocationManager.java:486)
03-05 00:18:51.465: W/System.err(26662):    at com.cff.travel.HelloPlugin.execute(HelloPlugin.java:126)
03-05 00:18:51.465: W/System.err(26662):    at org.apache.cordova.api.Plugin$1.run(Plugin.java:78)
03-05 00:18:51.465: W/System.err(26662):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
03-05 00:18:51.470: W/System.err(26662):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
03-05 00:18:51.470: W/System.err(26662):    at java.lang.Thread.run(Thread.java:856)


Вроде как все сделано, как описано в доках и примерах... Подскажите, что не так? Заранее благодарен за помощь!


Это сообщение отредактировал(а) chiffa - 5.3.2013, 02:16
PM MAIL   Вверх
Vladus
Дата 27.3.2013, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 1.2.2008

Репутация: нет
Всего: 4



судя по ошибке (Can't create handler inside thread that has not called Looper.prepare()) вы пытаетесь вызвать операцию изменения ui из не ui потока. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0989 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.