Autore Topic: Provider indisponibile  (Letto 805 volte)

Offline AriTiAdoro

  • Utente junior
  • **
  • Post: 98
  • Da soli non si va da nessuna parte!!
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Provider indisponibile
« il: 15 Ottobre 2011, 12:42:25 CEST »
0
salve ragazzi:

devo usare il servizio di localizzazione LocaionBased;testo se è disponibile in questo modo:


Codice (Java): [Seleziona]
//con questa istruzione,recupero il servizio di sistema che serve per la localizzazione
                        LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
//verifico che il servizio sia supportato dal telefono(in questo caso dall'emulatore)
                       
                        LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);
                       
                        if (gpsProvider == null) {
                                Log.i("DIPO","DISPONIBILE!!!");
                                }
                        else { Log.i("INDISPO","INDISPONIBILE!!!");
                               
                        }


Mi restituisce "INDISPONIBILE".

La mia domanda è: cosa posso fare??
In questo modo non posso andare avanti col programma..
Grazie!
Simo :)

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #1 il: 15 Ottobre 2011, 14:08:45 CEST »
0
Hai aggiunto le permission al manifest?
L'hai provata su un dispositivo?
Se funziona su un dispositivo reale, credo che per usarla sull'emulatore tu debba usare il testProvider abilitando prima le mock location (posizioni fittizzie) nel menù impostazioni/applicazioni/sviluppo.

Offline AriTiAdoro

  • Utente junior
  • **
  • Post: 98
  • Da soli non si va da nessuna parte!!
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #2 il: 15 Ottobre 2011, 14:14:30 CEST »
0
No, non ho un dispositivo Android;ti posto il mio Manifest:


Codice (Java): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.javacodegeeks.android.lbs"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".LbsGeocodingActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>


Può mancare qualche permission secondo te?
Simo :)

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #3 il: 15 Ottobre 2011, 14:41:03 CEST »
0
No, è perfetto.  :-)

Allora io proverei così, giusto per testare un po':
Codice (Java): [Seleziona]
                        LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
                       
                         //Prima parte
                          LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);
                       
                        if (gpsProvider == null) {
                                Log.i("DIPO","DISPONIBILE!!!");
                                }
                        else { Log.i("INDISPO","INDISPONIBILE!!!");
                               
                        }

                     //Proviamo ad aggiungere un test provider
                     locationManager.addTestProvider(/*Inserisci i valori che vuoi, magari definiscilo come un provider che usa i satelliti*/);
                     

                      //Guardiamo quali sono i provider disponibili e se figura il testProvider inserito
                      List<String> disponibili = locationManager.getAllProviders();
                      for (String nomeProvider:disponibili){
                         Log.i("mmm", "Provider trovato: "+nomeProvider);
                       }
                      if (disponibili.size()==0){
                          Log.i("mmm", "Nessun provider trovato");
                      }
                       

Offline AriTiAdoro

  • Utente junior
  • **
  • Post: 98
  • Da soli non si va da nessuna parte!!
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #4 il: 15 Ottobre 2011, 14:56:20 CEST »
0
Ho fatto cosi:
Codice (Java): [Seleziona]
locationManager.addTestProvider("mockprovider",  true, false, true, false, false, false, false, Criteria.POWER_LOW,Criteria.ACCURACY_COARSE);

 List<String> disponibili = locationManager.getAllProviders();
                for (String nomeProvider:disponibili){
                   Log.i("mmm", "Provider trovato: "+nomeProvider);
                 }
                if (disponibili.size()==0){
                    Log.i("mmm", "Nessun provider trovato");
                }


Ecco il risultato,me ne ha trovati altri 3 :

.....
10-15 12:53:09.704: INFO/mmm(306): Provider trovato: mockprovider
10-15 12:53:09.704: INFO/mmm(306): Provider trovato: network
10-15 12:53:09.714: INFO/mmm(306): Provider trovato: passive
10-15 12:53:09.714: INFO/mmm(306): Provider trovato: gps
.....


Ma allora perchè quando uso "gps" mi dice che non esiste?? :(
Simo :)

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #5 il: 15 Ottobre 2011, 15:10:12 CEST »
+1
Mi sono accorto solo ora che è sbagliato il nullcheck! Ahah!
Dovresti cambiare la condizione (gpsProvider==null) con (gpsProvider!=null).  :-)

Offline AriTiAdoro

  • Utente junior
  • **
  • Post: 98
  • Da soli non si va da nessuna parte!!
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #6 il: 15 Ottobre 2011, 16:00:30 CEST »
0
giustissimo.Grazie. Io sto scrivendo codice per visualizzare la posizione corrente dell'utente tramite il servizio GPS. Ma proprio non riesco:( Sai dirmi dov' e il problema?Intanto ti do un thanks

Codice (Java): [Seleziona]
public class LbsGeocodingActivity extends Activity  {
       
  LocationManager locationManager;
                  LocationListener myLocationListener=new LocationListener(){
                          @Override
                                public void onLocationChanged(Location location) {
                                        Double lan=location.getLatitude();
                                        Double lon=location.getLongitude();
                                        Log.i("lan",lan.toString());
                                        Log.i("lon",lon.toString());
                                       
                                }

                                @Override
                                public void onProviderDisabled(String provider) {
                                        // TODO Auto-generated method stub
                                       
                                }

                                @Override
                                public void onProviderEnabled(String provider) {
                                        // TODO Auto-generated method stub
                                       
                                }

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

                    @Override
               
                    public void onCreate(Bundle savedInstanceState) {
               
               
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.main);
                       
                     
                       
                       
                     
                        LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
                               
                       
                     
                        LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);
                       
                        if (gpsProvider != null) {
                                Log.i("DIPO","DISPONIBILE!!!");
                                }
                        else { Log.i("INDISPO","INDISPONIBILE!!!");
                               
                        }
                       
                        //se il servizio esiste,controllo che sia abilitato
                       
                        boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
                        Log.i("abilitato?","" + gpsEnabled);
                       
                   
                        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5, 1, myLocationListener);
                       
                       }
}
Simo :)

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #7 il: 15 Ottobre 2011, 16:09:55 CEST »
0
Mi sembra tutto corretto. Il problema è che non ricevi le notifiche di cambio posizione?  Purtroppo usando l'emulatore credo sia un po' scomodo. Devi andare nella finestra "Emulator control" e inserire manualmente le coordinate.

Offline AriTiAdoro

  • Utente junior
  • **
  • Post: 98
  • Da soli non si va da nessuna parte!!
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #8 il: 15 Ottobre 2011, 16:33:48 CEST »
0
Eh non no mi arrivano le notifiche.Usando l'emulator control come faccio a mandare le coordinate alla mia Activity?
Simo :)

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #9 il: 15 Ottobre 2011, 16:54:39 CEST »
0
Le inserisci nel location controls. How to set location on emulator | Hello Android

Offline AriTiAdoro

  • Utente junior
  • **
  • Post: 98
  • Da soli non si va da nessuna parte!!
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #10 il: 15 Ottobre 2011, 17:02:48 CEST »
0
mm ok! Cosi inserisco i valori però poi come faccio ad averli nella mia Activity?
Simo :)

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #11 il: 15 Ottobre 2011, 17:10:26 CEST »
+1
Vengono passati automaticamente dal location provider nell'onLocationChanged.  ;-)

Offline AriTiAdoro

  • Utente junior
  • **
  • Post: 98
  • Da soli non si va da nessuna parte!!
  • Respect: +1
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #12 il: 15 Ottobre 2011, 17:39:23 CEST »
0
Grazie davvero.
Simo :)

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Provider indisponibile
« Risposta #13 il: 15 Ottobre 2011, 17:41:28 CEST »
0
Di nulla!  :-)